最近在分析一个java内存的问题,发现使用nmon命令查看进程内存占用情况和采集数据用nmon analyzer进行分析数据上会有差异。
nmon m 4 结果如下:
可以看到PID 1704276的Res Set为1534612k,物理内存为30G,所以RAM USE 1.5/30=0.05是准确的。
但nmon数据用analyzer分析后对应的数据如下:
Time | PID | %CPU | %Usr | %Sys | Threads | Size | ResText | ResData | CharIO | %RAM | Paging | Command |
2017/3/9 15:02 | 1704276 | 29.44 | 26.32 | 3.12 | 172 | 1779516 | 128 | 1779440 | 53120 | 22.628 | 6 | java |
%RAM为22.6%,这个数值是如何得出的,是由于nmon版本和分析工具版本的问题导致的?
另外这个java进程的启动参数为-Xms8g -Xmx8g -XX:PermSize=512m,先不考虑non-heapsize部分,heapsize部分的8G在启动后不应该运行在内存中吗,为什么RSS看到的仅为1.53G呢?难道nmon的res set并不是RSS?请专家不吝赐教,谢谢
首先,连名字都不一样,那么含义一定不一样。
第二,在aix上,不同命令显示中的 相同的词(比如size),含义也不一样。因为这些工具都是分别开发的。
第三,nmon命令中 Res Size
The sum of real-memory data (resident set) and real-memory (resident set) text size of the process.进程数据段和代码段在物理内存中的数量。
ps命令中RSS
(v flag) The real-memory (resident set) size of the process (in 1 KB units).明显解释就不一样
进程还有共享段、栈段、堆段、未初始化的数据段等等。
关于内存的段,可以参考我的文章:
http://www.aixchina.net/Article/160989
每个参数都有它的含义,一定要搞清原理、查清命令中的具体含义。比如man ps,man topas看看具体解释。
收起