Date: Fri, 15 Nov 2002 18:03:27 +0500
From: Vitaly Filatov <vitaly@royint.com>
Newsgroups: ftn.ru.unix.solaris
Subject: Анализ распределения памяти по процессам в Solaris
>> $ ps -e -o vsz,rss,comm
>> В первой колонке - занимаемая процессом виртуальная память в килобайтах.
>> во второй колонке - размер резидентной (в ОЗУ) части процесса в килобайтах.
>> в третьей колонке - имя процесса.
>
> Дело в том, что под Solaris у меня крутится Oracle.
> и при выполнении ps -e -o vsz,rss,comm у меня основная масса строк имеет вид
> 2107168 2086504 oraclesid
> Значения первого и второго столбца немного изменяются, но в целом около 2-х
> гигов.. Я так понимаю, что это показывается расшаренный сегмент,
> используемый Oracle. Hо почему значения немного варируют? Ведь если
> используется расшаренный сегмент (например под SGA), то размер его должен
> быть постоянен, да и вообще под Solaris SGA не должна убегать в своп :-/
>
>>
>> Суммы по колонкам можно посчитать программой на awk:
>>
>> $ ps -e -o vsz,rss,comm | awk 'NR>1{v+=$1;t+=$2}END{print "VSZT=",v,"RSST=",t}'
>> VSZT= 253780 RSST= 155676
>
> И получается у меня
> VSZT= 1242442936 RSST= 1230105800, чего быть вообще говоря не может ..
1) В первой колонке - занимаемая процессом виртуальная память в килобайтах.
Hеобходимо учитывать, что одноимённые разделяемые библиотеки присутствуют в
памяти системы только один раз, но их объём плюсуется во все
числах из первого столбца.
2) Во второй колонке - размер резидентной (в ОЗУ) части процесса в килобайтах.
Здесь также разделяемые библиотеки учтены многократно. Это видно из следующего:
228680 - 146856 = 81824. Это не равно 52784k, что говорит о том, что я
что-то не учёл, т.е. в виртуальной памяти процесса присутствует нечто
(например буфера ввода вывода?), что не учитывается в rss.
Hо прикинуть, хвосты каких процессов находятся в свопе можно: чем больше
у процесса разница VSZ - RSS, тем больше занимаемый им своп.