首页 / JAVA / java-以编程方式捕获完整GC计数
java-以编程方式捕获完整GC计数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-以编程方式捕获完整GC计数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1699字,纯文字阅读大概需要3分钟。
内容图文
![java-以编程方式捕获完整GC计数](/upload/InfoBanner/zyjiaocheng/680/38f02f67bb1e486f91d196f063d1d050.jpg)
我正在尝试捕获在Java应用程序中出现的完整GC.到目前为止,我有两种方法都具有缺陷:
>每隔x秒钟轮询GarbageCollectorMXBean对象,然后尝试提取自上次轮询以来的GC时间和GC计数,并尝试检测发生GC的时间.不幸的是,我们不知道这是否是完整的GC.
>使用javax.management.NotificationListener,订阅GarbageCollectorMXBean通知.从理论上讲,当发生GC时,将以文本“主要GC结束”和“次要GC结束”以及原因来通知应用程序.这种方法的缺点是,持续时间似乎非常不正确(有时显示898秒,而GC日志将显示0.2秒),并且存在一个神秘的情况“ No GC”,似乎表明实际上没有执行GC(因为gc日志中没有任何条目).
当我收到GC通知时,可以查询GC MXBean,然后检查是否已执行GC,这是一种混合方法.不利的一面是No GC的原因可能仍会在“ major GC”的结尾触发,并导致逻辑更加复杂.
我真正想要的是由于GC操作而导致应用程序暂停的总时间.我认为捕获一个完整的GC就足以表明该应用程序已经暂停了一段时间,因此,如果我们检测到频繁的GC,我们就会知道使用率很高,否则该应用程序很快就会用完内存.是否有更好的解决方案来检测GC时间以及是否有完整的GC?
编辑:明确地说,我想在给定的JVM中捕获此信息.该JVM由一个单独的团队控制,我们不必控制将要设置的JVM参数,我们只能提出建议.这个想法与飞行记录器相似,但是向管理员实时提供信息.
解决方法:
如果使用热点特定的GC Bean,则可以进行新/旧区分,而不是并发/完整.但这在大多数情况下就足够了.
在那种情况下,我将轮询并使用来自相关世代的#LastGCInfo中的before / after信息:
例如,java.lang:type = GarbageCollector,name = PS Scavenge是年轻的一代,而java.lang:type = GarbageCollector,name = PS Mark当启用ParallelOld时扫描旧一代.
使用CMS,您可以在java.lang:type = GarbageCollector,name = ConcurrentMarkSweep中看到并发集合和完整集合(但希望永远不会有完整集合:)
这是特定于GC和VM的,因此需要一些试探法来支持您关心的所有平台.
我认为只有在Flight Recorder事件中才可以进行更细粒度的监视,但是我对此没有经验.
内容总结
以上是互联网集市为您收集整理的java-以编程方式捕获完整GC计数全部内容,希望文章能够帮你解决java-以编程方式捕获完整GC计数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。