Jon*_*han 8 java performance monitoring garbage-collection
我们希望内化JConsole/JVisualVM的一些功能,并从正在运行的应用程序中收集有关cpu利用率和内存消耗的数据.原因是,安全约束阻止我们在生产系统上向外部打开jmx端口.
可以通过MXBeans监视所需的大多数数据,但是,用于垃圾收集的cputime仍然无法实现.通过GarbageCollectorMXBean它监控gc-time 是没有用的,因为它只提供并行工作收集器的挂壁时间.
我假设可以使用ThreadMXBean来确定所有gc-threads的cputime.我看不到安全识别这些线程的方法.
有谁知道,JVisualVM如何计算这个数字?
前一段时间,我写了有关JVM诊断API的摘要,可在此处获得。
简而言之,MBean和“首选计数器”是JVM自我诊断的主要来源。
JVisualVM正在使用GarbageCollectorMXBean将挂钟时间解释为CPU时间(即显示废话)。
ThreadMXBean不包括GC线程是线程列表,因此它也没有用。在SJK工具中,我从进程CPU时间中减去所有应用程序线程的累积CPU时间。这种方法不准确,但总比没有好。
“性能计数器”具有有关GC CPU使用率的准确信息。可以通过访问“性能计数器” sun.management.counter.perf.PerfInstrumentation。
在这里,您可以找到转储主机JVM的“性能计数器”的示例(JUnit测试)。
您需要sun.gc.collector.0.time和sun.gc.collector.1.time计数器来测量新旧GC /完整GC的累计CPU使用率(请注意,它们以滴答表示)。
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |