full gc_在运行时打开GC日志记录

full gc

full gc

我自己的汽车音响概念图
总是有下一个JVM表现不佳。 而且,您内心深知,如果您只有少数启动选项可以揭示有关正在发生的事情的更多信息,则您可能有机会真正修复该死的东西。 但是不,您需要的标志( -XX:+ HeapDumpOnOutOfMemoryError或-XX:+ PrintGCDetails )始终丢失。

因此,您可以悲痛地耸耸肩,杀死受苦的JVM,更改启动参数,并祈祷问题的情况在重新启动后得以重现。 有时确实如此,现在您可能有足够的证据来实际进行并开始解决根本原因。

所描述的方法的问题很明显–您需要进行一次额外的重新启动,而不是单次中断,才能选择那些令人讨厌的调试选项。 事实上,有一种解决方法,有时将其添加到您的武库中可能会被证明是有益的。

资讯

JDK捆绑包中隐藏了一个不错的小实用程序。 jinfo是一个命令行实用程序,用于从运行中的Java进程中收集配置信息。 但是,有趣的部分是,使用-flag选项, jinfo实用程序可以为指定的Java进程动态调整某些Java VM标志的值。 这样的标志的列表是有限的,但是在某些情况下仍然有用。 可以通过以下命令检查JVM上此类标志的完整列表:

my-precious me$ java -XX:+PrintFlagsFinal -version|grep manageable
     intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}
     intx CMSWaitDuration                           = 2000                                {manageable}
     bool HeapDumpAfterFullGC                       = false                               {manageable}
     bool HeapDumpBeforeFullGC                      = false                               {manageable}
     bool HeapDumpOnOutOfMemoryError                = false                               {manageable}
     ... cut for brevity ...
     bool PrintGC                                   = false                               {manageable}
     bool PrintGCDateStamps                         = false                               {manageable}
     bool PrintGCDetails                            = false                               {manageable}
     bool PrintGCTimeStamps                         = false                               {manageable}

-XX:+ PrintFlagsFinal列出所有JVM选项,在外面的“管理”选项目前的兴趣。 这些可以通过JDK管理界面( com.sun.management.HotSpotDiagnosticMXBean API )动态写入。 同样的MBean也通过JConsole发布。 按照我的喜好,命令行版本要方便得多。

示例如何使用jinfo

作为如何使用jinfo的示例,让我们动态地在运行的JVM上打开GC日志记录:

my-precious me$ jps
12278 HighAllocationRate
12279 Jps
12269 JConsole
my-precious me$ jinfo -flag +PrintGCDetails 12278
my-precious me$ jinfo -flag +PrintGC 12278
my-precious me$

该实用程序通过打开-XX:+ PrintGC和-XX:+ PrintGCDetails选项来打开GC日志记录。 与命令行参数的行为的细微差别在于,您必须通过jinfo同时指定PrintGCDetailsPrintGC选项 如果您是通过启动脚本设置参数的,则只需-XX:+ PrintGCDetails即可,因为它会自动打开-XX:+ PrintGC

不过,检查标准输出后,12278 PID的GC日志开始顺利滚动:

...
[GC (Allocation Failure) [PSYoungGen: 876416K->102624K(909312K)] 1094420K->320820K(1161216K), 0.2173131 secs] [Times: user=0.74 sys=0.00, real=0.22 secs] 
...
[GC (Allocation Failure) [PSYoungGen: 890304K->102240K(917504K)] 1108924K->320956K(1169408K), 0.2446639 secs] [Times: user=0.82 sys=0.01, real=0.25 secs] 
...

关闭日志记录是类似的–您只需要调用jinfo -flag -PrintGCDetails 12278jinfo -flag -PrintGC 12278命令即可删除日志消息。

有了这些知识,我只能希望它将为您节省一到两天的故障排除时间。 假设您不是性能监控工具(例如Plumbr)的满意用户之一,在这种情况下,您首先不会遇到此类需求。

翻译自: https://www.javacodegeeks.com/2015/03/turning-on-gc-logging-at-runtime.html

full gc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值