Что такое правильный способ получить размер процесса на Solaris, HP-UX
и AIX
? Должны ли мы использовать top
или ps -o vsz
или что-то еще?
Точные определения vsize
, rss
, rprvt
, rshrd
, и другие малоизвестные выглядящие аббревиатуры варьируются от ОСА OS. Страницы руководства для top
и ps
команд будет иметь какое - то описание, но все такие описания значительно упрощается (или основаны на давно вымерших реализации ядра).
«Размер процесса» как концепция трудно определить в общем случае. Ответы в конкретных случаях сильно зависят от фактической реализации управления памятью в ОС, и редко бывают такими же удовлетворительными, как концепция аккуратного «размера процесса», существующая в умах большинства пользователей (и большинства разработчиков).
Например, ни одно из этих чисел (ни, вероятно, любая их комбинация) не может быть использовано, чтобы точно сказать, сколько таких процессов может выполняться одновременно при заданном объеме свободной памяти. Но на самом деле, вам лучше всего прийти к этому с этой целью: зачем вам этот номер и для чего он будет использоваться? Учитывая эту информацию, я думаю, вы получите более полезные ответы.
В Solaris вы можете получить подробную информацию об использовании памяти процессом с помощью pmap
команды. В частности, pmap -x <pid>
показывает, какая часть памяти процесса используется совместно и сколько конкретно используется этим процессом. Это полезно для определения «предельного» использования памяти процессом - с помощью этого метода вы можете избежать двойного учета разделяемых библиотек.
Да, вы правы, чтобы заблокировать на VSZ.
ps u
даст вам VSZ и RSS, которые представляют собой размер виртуальной памяти и размер резидентного набора. RSS - это объем физической памяти, выделенной процессу, а VSZ - размер виртуальной памяти процесса. Если у вас запущено несколько копий программы, большая часть памяти в VSZ будет распределена между этими процессами.
Я суммировал размер резидентного набора для всех процессов, подобных этому (как root):
ps ax -o rss | awk '{rss += $1;} END { print rss}'