gpt4 book ai didi

java - Jstat 和 Jvisualvm 显示不同的堆使用/分配数字

转载 作者:行者123 更新时间:2023-11-29 05:12:24 26 4
gpt4 key购买 nike

有一台服务器,我无法在其上运行任何基于 GUI 的分析器(例如 jvisualvm)来监视正在运行的 Java 进程的堆。根据this answer , 我可以使用 jstat -gc <pid>并查看 OU 和 OC 列以找出堆的使用和分配。

但我只是在另一台服务器上比较了 jvisualvm 和 jstat,它们显示的堆使用和分配数字并不相同。

Jvisualvm 显示 Java 进程为堆分配了大约 1GB,并使用了大约 500MB:

enter image description here

但是对于同一个进程,jstat 仅在 OC 列下显示大约 700MB,在 OU 列下显示大约 226MB:

# jstat -gc 39621
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
16384.0 17920.0 3984.0 0.0 322560.0 10320.4 699392.0 226295.2 83968.0 47921.1 11966 66.103 12 3.083 69.186

为什么 jvisualvm 和 jstat 显示不同的堆使用和分配数字?

最佳答案

对于 Java 8,jstat 实用程序已更新,并且对于

jstat –gc <PID>

在输出中有这些字段:

S0C     S1C      S0U   S1U     EC       EU        OC         OU        MC      MU      CCSC   CCSU    YGC     YGCT    FGC     FGCT     GCT   

39936.0 29184.0 0.0 29035.4 273920.0 170661.5 699392.0 39235.9 98480.0 97022.7 8624.0 8163.3 63 0.925 38 2.363 3.289

堆使用情况

要获取当前堆使用情况,大约是jVisualJM中的值,需要加上以下值:

S0U: Survivor space 0 utilization (kB)

S1U: Survivor space 1 utilization (kB)

EU: Eden space utilization (kB)

OU: Old space utilization (kB)

查看Java 8 Virtual Machine Garbage Collection Tuning Guide ,堆似乎由“年轻”一代(Eden & Survivor 0 & 1 空间)和“老”一代(旧空间)组成。

元空间使用

要获取当前的元空间使用情况,大约是 jVisualJM 中的值,需要以下大小:

MU: Metaspace utilization (kB)

注意事项

无论出于何种原因,我从未能够在 jstat 和 jVisualJM 之间获得完全相同的值,但足够接近以允许自信地使用这两种工具。

JVM 内存池

有关 JVM 内存池的更多详细信息,请参阅此 StackOverflow question & answer涵盖 Java 7 和 8。

Java 8 Using JConsole guide 中也有一些信息但令人惊讶的是,这仍然提到了 Java 7 永久代空间而不是 Java 8 元空间。

关于java - Jstat 和 Jvisualvm 显示不同的堆使用/分配数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com