Анализ распределения памяти по процессам в Solaris (solaris memory proccess debug)
Ключевые слова: solaris, memory, proccess, debug, (найти похожие документы)
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) В первой колонке - занимаемая процессом виртуальная память в килобайтах.
Эта память есть сумма (см. man pmap):
(команды задачи) + heap + stack + (команды разделяемых библиотек)
Hеобходимо учитывать, что одноимённые разделяемые библиотеки присутствуют в
памяти системы только один раз, но их объём плюсуется во все
числах из первого столбца.
2) Во второй колонке - размер резидентной (в ОЗУ) части процесса в килобайтах.
Здесь также разделяемые библиотеки учтены многократно. Это видно из следующего:
$ ps -ef | grep "/bin/sh"
vitaly 674 671 0 15:03:01 pts/5 0:00 /bin/sh
vitaly 444 441 0 14:09:50 pts/4 0:00 /bin/sh
vitaly 685 682 0 15:04:44 pts/7 0:00 /bin/sh
vitaly 679 676 0 15:03:55 pts/6 0:00 /bin/sh
vitaly 707 704 0 15:19:01 pts/8 0:00 /bin/sh
vitaly 713 710 0 15:20:25 pts/9 0:00 /bin/sh
$ ps -e -o vsz,rss,comm | grep "/bin/sh"
1040 772 /bin/sh
1040 756 /bin/sh
1040 772 /bin/sh
1040 772 /bin/sh
1040 772 /bin/sh
1040 772 /bin/sh
$ /usr/proc/bin/pmap -x 674
674: /bin/sh
Address Kbytes Resident Shared Private Permissions Mapped File
00010000 88 88 84 4 read/exec sh
00035000 8 8 - 8 read/write/exec sh
00037000 12 8 - 8 read/write/exec [ heap ]
EF680000 4 4 - 4 read/write/exec [ anon ]
EF690000 16 16 12 4 read/exec ru.so.2
EF6A3000 4 4 - 4 read/write/exec ru.so.2
EF6C0000 664 640 620 20 read/exec libc.so.1
EF775000 32 32 - 32 read/write/exec libc.so.1
EF77D000 4 - - - read/write/exec [ anon ]
EF780000 24 24 20 4 read/exec libgen.so.1
EF795000 8 8 - 8 read/write/exec libgen.so.1
EF7A0000 4 4 - 4 read/exec libdl.so.1
EF7B0000 4 4 - 4 read/write/exec [ anon ]
EF7C0000 144 144 140 4 read/exec ld.so.1
EF7F3000 8 8 - 8 read/write/exec ld.so.1
EF7F5000 4 4 - 4 read/write/exec [ anon ]
EFFFD000 12 12 - 12 read/write/exec [ stack ]
-------- ------ ------ ------ ------
total Kb 1040 1008 876 132
Посчитаю разницу:
$ ps -e -o vsz,rss,comm | awk 'NR>1{v+=$1;t+=$2}END{print "VSZT=",v,"RSST=",t}'
VSZT= 228680 RSST= 146856
$ /usr/sbin/swap -s
total: 41080k bytes allocated + 11704k reserved = 52784k used, 229992k available
228680 - 146856 = 81824. Это не равно 52784k, что говорит о том, что я
что-то не учёл, т.е. в виртуальной памяти процесса присутствует нечто
(например буфера ввода вывода?), что не учитывается в rss.
Hо прикинуть, хвосты каких процессов находятся в свопе можно: чем больше
у процесса разница VSZ - RSS, тем больше занимаемый им своп.
Можно использовать команду:
(/usr/proc/bin/pmap -x 1|head -2|tail -1|sed
's/Address/Process/;s/Permissions.*//');ps -e | awk
'NR>1{print "echo \"",$1,"\c\";/usr/proc/bin/pmap -x",$1,"|tail -1|sed
\"/process/d;s/total
Kb//\""}'| sh 2>&1 | sed '/process/d'
чтобы посмотреть детали распределения памяти по процессам:
# (/usr/proc/bin/pmap -x 1|head -2|tail -1|sed
's/Address/Process/;s/Permissions.*//');ps -e | awk
'NR>1{print "echo \"",$1,"\c\";/usr/proc/bin/pmap -x",$1,"|tail -1|sed
\"/process/d;s/total
Kb//\""}'| sh 2>&1 | sed '/process/d'
Process Kbytes Resident Shared Private
1 740 292 - 292
293 1692 1608 1364 244
107 2136 1896 1376 520
287 1688 1616 1364 252
48 1164 1116 876 240
50 2120 2004 1448 556
188 2212 2128 1472 656
105 2408 2196 1544 652
103 2212 1908 1260 648
114 2392 2128 1468 660
112 3516 3144 1736 1408
148 2308 2040 1436 604
294 15800 12808 1332 11476
156 2688 2448 1504 944
144 2172 1980 1352 628
187 2024 1940 1344 596
147 1772 1608 1272 336
165 3460 2160 1416 744
193 3036 1896 1312 584
175 1728 1652 1348 304
219 2132 2048 1404 644
207 1204 1156 876 280
216 984 920 768 152
221 2408 2240 1448 792
234 2112 2016 1284 732
228 2512 2200 1336 864
236 1920 1828 1284 544
292 1628 1568 1256 312
295 5088 4476 2936 1540
272 2468 2176 1476 700
274 1764 1600 1272 328
277 1788 1692 1400 292
279 1972 1720 1288 432
339 2244 2060 1776 284
286 1620 1548 1304 244
289 4672 4056 2768 1288
297 2244 2060 1776 284
327 1764 1692 1480 212
386 1044 1012 876 136
329 1804 1732 1480 252
410 1768 1700 1480 220
433 4152 3920 3240 680
383 3792 3268 2308 960
674 1040 1008 876 132
409 3328 2960 1704 1256
407 4392 3972 2324 1648
408 1768 1700 1480 220
453 29316 25784 4848 20936
415 2248 2064 1776 288
425 3960 3728 3124 604
432 2800 2616 1856 760
441 4300 4060 3200 860
444 1040 1008 876 132
446 5460 5112 3336 1776
452 7908 7540 3612 3928
671 4316 4084 3200 884
454 18928 15696 4776 10920
703 1040 1008 876 132
670 1040 1008 876 132
682 4312 4080 3200 880
685 1040 1008 876 132
690 5076 4744 3544 1200
709 1040 1008 876 132
704 4300 4068 3200 868
676 4316 4080 3200 880
679 1040 1008 876 132
681 1040 1008 876 132
707 1040 1008 876 132
708 2144 2008 1384 624
710 4316 4084 3200 884
713 1040 1008 876 132
790 3612 2664 1776 888
784 4300 4064 3200 864
787 1040 1008 876 132
803 4360 4128 3200 928
806 1040 1008 876 132
906 284 276 8 268
2891 4212 3980 3144 836
2899 1040 1008 924 84
2896 1004 972 840 132
Виталий Филатов
http://members.tripod.com/Vitaly_Filatov