




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