因此,在 Solaris 10 10/09 区域上,我看到所有常驻内存都被用完了。在尝试找到分配所有物理内存的进程时,我注意到“prstat”给出的 RSS 总数与区域中使用的整个 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
知道所有物理内存都到哪里去了吗?
答案1
居民和共享重叠,或者:共享内存页面不是独占的。例如,如果多个进程将 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