【问题标题】:How to track and monitoring, jvm class size [closed]如何跟踪和监控,jvm 类大小 [关闭]
【发布时间】:2020-07-23 12:44:20
【问题描述】:

昨天我的 JVM 应用程序由于 CPU 使用率高而崩溃,在检查根本原因时,这是因为 GC 停止了世界。 GC 需要更多时间来清理内存,这是因为我在应用程序中引入了新的 LRU 缓存。所以我的问题是:

有什么方法可以通过 JVM 类来跟踪内存组的大小?例如,我有 3 个类,FooBarBaz

我想知道每个类在运行时使用了多大的内存。

我有一个 Datadog 帐户,因此我计划使用工具将这些指标发送到 Datadog。

【问题讨论】:

  • 我想你已经知道 JMC(JDK Mission Control)了?见5 Real-time JMX Monitoring
  • 也就是说,询问工具推荐的问题在这里是题外话。

标签: java memory-management jvm


【解决方案1】:

你可以使用简单的jcmd命令行工具

jcmd <PID> GC.class_histogram | less

作为在我的简单 Clojure 应用程序上运行的示例:

 num     #instances         #bytes  class name (module)
-------------------------------------------------------
   1:         40131        2944504  [B (java.base@14.0.1)
   2:         38953        1666008  [Ljava.lang.Object; (java.base@14.0.1)
   3:          7610         961920  java.lang.Class (java.base@14.0.1)
   4:         36134         867216  java.lang.String (java.base@14.0.1)
   5:          2353         762216  [I (java.base@14.0.1)
   6:         25076         601824  clojure.lang.PersistentHashMap$BitmapIndexedNode
   7:         13950         446400  java.util.concurrent.ConcurrentHashMap$Node (java.base@14.0.1)
...

【讨论】:

  • jcmd 就像一颗隐藏的宝石!
  • 哦哇这就是我想要的,但是我可以使用任何库来获得相同的结果吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 2019-10-31
  • 1970-01-01
  • 2012-10-06
  • 2023-04-10
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多