Каков правильный способ получения размера процесса на Solaris, HP-UX
и AIX
? Нужно ли использовать top
или ps -o vsz
или что-то еще?
Точные определения vsize
, rss
, rprvt
, rshrd
и других непонятных аббревиатур варьируются от ОС к ОС. На страницах руководств к командам top
и ps
есть какое-то описание, но все эти описания сильно упрощены (или основаны на давно исчезнувших реализациях ядра).
Понятие "размер процесса" в общем случае невероятно сложно определить. Ответы в конкретных случаях сильно зависят от фактической реализации управления памятью в ОС, и редко бывают настолько удовлетворительными, как аккуратная концепция "размера процесса", которая существует в сознании большинства пользователей (и большинства разработчиков).
Например, ни одно из этих чисел (и, скорее всего, ни одна из их комбинаций) не может быть использовано для того, чтобы точно сказать вам, сколько таких процессов может быть запущено одновременно в данном объеме свободной памяти. Но на самом деле, лучше всего подойти к этому вопросу с другой стороны: зачем вам нужно это число, и для чего вы будете его использовать? Учитывая эту информацию, я думаю, вы получите больше полезных ответов.
В Solaris вы можете получить подробную информацию об использовании памяти процессом с помощью команды pmap
. В частности, команда pmap -x <pid>
показывает, какая часть памяти процесса является общей, а какая используется конкретно этим процессом. Это полезно для определения "предельного" использования памяти процессом - с помощью этой техники можно избежать двойного учета общих библиотек.
Да, вы правы, что нужно закрывать на VSZ.
ps u
выдаст вам VSZ и RSS, которые представляют собой размер виртуальной памяти и размер резидентного набора. RSS - это сколько физической памяти было выделено процессу, а VSZ - это размер виртуальной памяти процесса. Если у вас запущено несколько копий программы, большая часть памяти в VSZ будет разделена между этими процессами.