我正在Java 8上使用不同的jvm选项进行实验,以降低RSS:
用于Rss跟踪的脚本:
ps -o rss -o vsz -o pid $pid
用于设置Java进程的JVM参数:
-XX:+PrintNMTStatistics -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=detail
以jcmd作为基准:
-XX:+PrintNMTStatistics -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=detail
与jcmd进行比较:
jcmd $pid VM.native_memory baseline
输出(线程区域的一部分):
jcmd $pid VM.native_memory summary.diff
问题:上面输出的RSS将考虑使用什么内存,是- Thread (reserved=130696KB -21564KB, committed=130696KB -21564KB)
(thread #121 -21)
(stack: reserved=130048KB -21504KB, committed=130048KB -21504KB)
(malloc=379KB -67KB #610 -105)
(arena=268KB +7 #240 -42)
还是committed
?
保留/承诺与居民/虚拟之间的关系要复杂一些。 RSS覆盖物理内存中的页面[[resident。已调出(或从不调入)的内容可以提交但不能驻留。
也许这回答了您的问题:保留但未提交的页面无法驻留。