我需要找出Linux中Java进程消耗的实际内存是多少,像visualVM/jconsole这样的工具显示的是准确的,但我必须通过top命令计算JVM使用的实际内存。如何计算使用top linux的java的实际内存使用情况?
我正在查看PID:28169如果你看顶部(linux),它说17.2g(虚拟),Res 10g,共享:15m。 10G是不可能的,因为我已经给这个jvm进程提供了6G jvmmax,但是如果我使用jvmtop它会显示启动结果(与visualVM匹配)
有人能告诉我如何使用最高统计数据计算内存的实际使用情况吗?
使用JvmTop
JvmTop 0.8.0阿尔法 - 11时09分08秒,AMD64,12个CPU,Linux的2.6.32-57,负荷平均0.00 http://code.google.com/p/jvmtop
PID 28169: com.gigaspaces.start.SystemBoot
ARGS: com.gigaspaces.start.services="GSC"
VMARGS: -XX:+AggressiveOpts -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemo[...]
VM: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 1.7.0_51
UP: 179:23m #THR: 90 #THRPEAK: 92 #THRCREATED: 3725 USER: evolv
GC-Time: 0: 2m #GC-Runs: 3353 #TotalLoadedClasses: 23107
CPU: 1.46% GC: 0.00% HEAP:4623m /10240m NONHEAP: 180m/304m
TID NAME STATE CPU TOTALCPU BLOCKEDBY
3733 RMI TCP Connection(2210)-10.16 RUNNABLE 14.93% 0.00%
3734 JMX server connection timeout TIMED_WAITING 0.13% 0.00%
95 GS-directLoadJobListenerPollin TIMED_WAITING 0.12% 0.14%
94 GS-jobListenerPollingContainer TIMED_WAITING 0.11% 0.14%
3375 GS-jobListenerPollingContainer TIMED_WAITING 0.10% 0.55%
93 GS-jobListenerPollingContainer TIMED_WAITING 0.09% 0.14%
3377 GS-jobListenerPollingContainer TIMED_WAITING 0.09% 0.56%
81 GS-subJobCompleteListenerPolli TIMED_WAITING 0.09% 0.14%
3376 GS-jobListenerPollingContainer TIMED_WAITING 0.08% 0.54%
98 GS-stopJobListenerPollingConta TIMED_WAITING 0.08% 0.14%
Note: Only top 10 threads (according cpu load) are shown!
^C-bash-4.1$
using Top :
top - 11:15:30 up 18 days, 6:34, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 306 total, 1 running, 304 sleeping, 1 stopped, 0 zombie
Cpu(s): 0.3%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16332776k total, 15913220k used, 419556k free, 316876k buffers
Swap: 4095996k total, 146452k used, 3949544k free, 3024048k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28169 evolv 20 0 17.2g 10g 15m S 2.8 70.3 4493:54 java
28034 evolv 20 0 5690m 289m 7656 S 0.0 1.8 16:31.29 java
28006 evolv 20 0 5821m 286m 7952 S 0.5 1.8 18:16.50 java
2098 root 20 0 272m 145m 4016 S 0.3 0.9 46:51.51 splunkd
2163 root 20 0 128m 40m 1220 S 0.0 0.3 1:05.86 puppet
1879 root 20 0 244m 6660 5036 S 0.0 0.0 1:21.82 sssd_be
什么是你正在使用启动这个JVM的命令行参数?你说10Gb是不可能的,但是如果你看看jvmtop,它报告堆为4623m/10240m。 10240m是10Gb,这就是为什么top报告10Gb的驻留内存。 – Speakjava
对不起,我想我提到incorreclty我已经给最小和最大10240米 - 这是命令为Java Xms10240m -Xmx10240m,这是否意味着顶部将始终显示10克,即使它没有利用这一数量的内存, – Umer
假设您使用HotSpot来自Oracle的VM然后是。 JVM预先为您定义的堆的大小预先分配虚拟内存(在这种情况下,最小和最大都是10G,这就是分配的内存)。但请记住,这只是虚拟内存(它本质上只是JVM可以使用的一系列地址)。实际需要内存时,物理内存页面将只映射到这些虚拟页面。这就是为什么准确地确定JVM使用的内存量非常困难的原因。 – Speakjava