我正在尝试调试java进程占用的内存量。如果我错了,请纠正我。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11798 root 20 0 17.354g 6.084g 164456 S 38.9 10.2 12:52.04 java
这是一个过程。这就是我启动java应用程序的方式
'-server -Xmx10G -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps'
正如您所看到的,我正在为该应用程序提供10G的内存。但根据帮助页面,%MEM是实际内存使用率的百分比。在这种情况下,我假设它只使用10%的10%?
我之所以这样问是因为,如果它只使用1GB,我可能希望将-Xmx降低到3GB,然后给它10G会有点过分。
我的问题是,我是否正确假设10%是该进程内存的实际使用情况,因此我降低了-Xmx选项,以便其他进程可以获得更多内存。
答案 0 :(得分:1)
不,%MEM列中的10.2%并不意味着其分配的JVM的10.2%。 "顶部"不知道您使用的JVM启动选项。 " top"的手册页将%MEM定义为
"任务当前使用的可用物理内存份额。"
因此它是可用的总系统内存(物理非虚拟)。