java - 如何使用top linux计算java的实际内存使用情况?

标签 java linux memory jvm heap-memory

我需要找出Linux中Java进程实际消耗的内存是多少,像visualVM/jconsole这样的工具显示准确,但我必须通过top命令计算JVM实际使用的内存。

我正在查看 PID:28169 如果你查看顶部(linux),它会显示 17.2g(虚拟),资源 10g,共享:15m。 10G 是不可能的,因为我已经给这个 jvm 进程提供了 6G jvmmax,但如果我使用 jvmtop,它会显示实际结果(与 VisualVM 匹配)
有人可以告诉我如何使用顶级统计数据计算内存的实际使用情况吗?

使用JvmTop

JvmTop 0.8.0 alpha - 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

最佳答案

您可以使用jstat来查看进程统计信息。

示例

jstat -gc [insert-pid-here]

以上内容将为您提供 GC 堆的概述。

其他命令

jstat -gccapacity [insert-pid-here]
jstat -gcutil [insert-pid-here]

关于java - 如何使用top linux计算java的实际内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617851/

相关文章:

linux - 从 rhel 中的输出中去除文本

linux - 为什么当 devtmpfs 已安装并记录时,我会从 ACPID 获得控制台输出,而未安装时?

multithreading - 线程内存布局

java - 将英语句子变成一阶逻辑

java正则表达式发现正则表达式

java - 在 Web 应用程序中使用 JSTL

c - 为什么无法识别文件系统?

java - 为什么 Runtime.freeMemory() 在构造对象后显示更多的内存?

安卓:内存不足

java - 在更大的文本中检索某些文本