Итак, в зоне Solaris 10 10/09 я вижу, что вся резидентная память израсходована. Пытаясь определить местонахождение процесса, который распределяет всю нашу физическую память, я заметил, что итоги RSS, которые дает "prstat", не суммируются со всем общим RSS, используемым в зоне.
Нет сегментов разделяемой памяти, и pmap -x сообщает о тех же количествах использования, которые указаны для отдельных процессов в prstat.
Вот некоторые выходные данные команды. Как видите, добавление RSS для верхних процессов далеко не соответствует общему сообщенному RSS (5063M).
# prstat -n 20 -s rss -Z
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
18481 nobody 14G 1457M cpu18 30 0 0:20:51 4.3% java/272
18970 nobody 435M 399M sleep 59 0 0:02:44 1.2% java/30
19083 nobody 371M 363M sleep 59 0 0:02:08 0.4% java/47
18803 nobody 330M 257M sleep 59 0 0:09:51 13% java/366
22260 nobody 410M 132M sleep 59 0 3:52:07 0.3% java/23
12430 daemon 81M 35M sleep 59 0 0:00:23 0.0% httpd/28
12429 daemon 87M 33M sleep 59 0 0:00:22 0.0% httpd/28
...
very low usage processes
....
ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE
17 93 3197M 5063M 99% 24:57:19 27% cygna
Есть идеи, куда делась вся физическая память?
резидент и общий overlap, или: страницы с общей памятью не являются исключительными. например если несколько процессов имеют libc, отображаемую в их пространство памяти, они будут совместно использоваться (пока COW не сделает их не разделяемыми). Выход pmap
может помочь.
Также см. Этот ответ для некоторого понимания, но имейте в виду, что управление памятью Solaris и Linux отличается в нескольких деталях (наиболее важным из них является подход к избыточной фиксации): https://stackoverflow.com/questions/1612939/why-does-the-sun-jvm-continue-to-consume-ever-more-rss-memory-even-when-the-heap