我需要找出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