http://www.importnew.com/15722.html (在运行时开启GC日志)
我们经常会遇到JVM运行时出错的情况。若能在启动时加入一些启动选项(startup option),便可以获取与bug相关的重要线索,从而有希望根治它们。但在实际操作时,我们总是忘记添加-XX:+HeapDumpOnOutOfMemoryError
或 -XX:+PrintGCDetails
这样必要的flag。
每当面对如此窘境,我们只能关闭JVM,修改启动参数(startup parameter),然后默默祈祷,希望问题场景(problematic situation)能在重启之后得以重现。这种方法偶尔奏效,在场景重现后你或许还能收集到足够的证据,以便动手根治潜在的问题。
不难看出,前文所述的方法问题显著——你必须执行一次额外的重启才能加入那烦人的debug选项,而不能借助中断(outage)实现。事实上,JDK bundle提供了一种可行的变通方案,如果将之收入麾下,偶尔还能从中获益。
jinfo
在JDK bundle中隐藏着一个精悍的小工具——jinfo。作为一个命令行工具,jinfo用于收集正在运行的Java进程的配置信息。jinfo吸引眼球的地方在于,它能通过-flag
选项动态修改指定的Java进程中的某些JVM flag的值。虽然这样的flag数量有限,但它们偶尔能够帮助到你。通过以下的命令你便能看到JVM中哪些flag可以被jinfo动态修改:
1
2
3
4
5
6
7
8
9
10
11
|
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 flag,而其中的标注为manageable
的flag则是值得我们关注的部分。这些flag可通过JDK management interface(-XX:+PrintFlagsFinal)动态修改。虽然在JConsole中也能查到与其十分相似的MBean。但在我看来,以命令行的方式查看它们更加的便捷。
如何使用jinfo
让我们通过实战来学习如何使用jinfo。在下面的例子中,我们将在一个正在运行的JVM中动态开启GC日志功能:
1
2
3
4
5
6
7
|
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$ |
在jinfo中需要打开-XX:+PrintGC
和 -XX:+PrintGCDetails
两个选项才能开启GC日志,这与用命令行参数的方式实现有着细微的差别——如果你通过启动脚本(startup script)来设置参数,仅需-XX:+PrintGCDetails
即可,因为-XX:+PrintGC
会被自动打开。
不过,从standard output的结果来看,PID为12278的进程的GC日志的确能够滚动地显示出来:
1
2
3
4
5
|
... [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] ... |
同理,若想关闭GC日志功能,只需要执行jinfo -flag -PrintGCDetails 12278
和 jinfo -flag -PrintGC 12278
命令即可。
在我看来,学会使用jinfo,只能让你在故障排除的工作中少花一到两天的时间。若打一开始就使用Plumbr这类性能监控工具,你可能从未有过这样的烦恼。
相关推荐
适用于jvm运行生成的gc日志文件可视化分析
虽然功能叫hpjmeter简单,界面也不咋地 不过容错性要比hpjmeter强很多,虽然快照中所有性能指标都挤在一起,但是很直观 总体来说比较强悍,特收金币一枚...
JVM 输出 GC 日志导致 JVM 卡住
英文版的IBM JVM GC的非常详细的技术文档,包括GC的原因分析,GC日志分析,GC过程分析
对gc日志进行统计分析,使用命令:java -jar gcviewer-1.3x.jar gc.log summary.csv [chart.png] [-t PLAIN|CSV|CSV_TS|SIMPLE|SUMMARY]
输出GC日志 输出 GC 日志对于跟踪分析 GC 的状况,无疑是最明显和直接的分析内存回收状况的方 法,只是 GC 日志输出后需要人肉的进行分析,来判断 GC 的状况。 JVM 支持将日志输出到控制台或指定的文件中,方法为: 1、 ...
主要介绍了Java虚拟机GC日志分析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
kafka / redis / es / mysql 20210313添加netty的demo 20210308添加HBase操作相关的Demo 20210303添加Flink操作的Demo 20210228添加HBase操作的演示添加JVM GC日志操作Demo 20210119添加java相关实例:java8并发包...
深入java虚拟机光盘资源jvm-gc-logs-analyzer 这个项目是一个 Java 虚拟机和垃圾收集器日志分析器。 它专用于 JVM 11 及更高版本(JVM 8 支持正在开发中)。 日志必须采用适当的格式和适当的装饰器,检查最后部分的...
该 Java 库为 Oracle JDK 1.7 和 1.8 生成的 GC 日志提供解析器。 它包括一个命令行实用程序,用于从日志生成 CSV 文件。 您可以将它们加载到您最喜欢的工具中进行分析。 请参阅以下鼓舞人心的文章作为示例 -。 要求...
- 了解下我们为什么要学习JVM优化 - 掌握jvm的运行参数以及参数的设置 - 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及...- 学习GC日志的可视化查看 - Tomcat8的优化 - 看懂Java底层字节码 - 编码的优化建议
网盘文件永久链接 目录 day1: 1 为什么要对jvm做优化 2 jvm的运行参数 3 jvm的内存模型 4 jmap的使用以及内存溢出分析 ...4 可视化GC日志分析工具 day3: 1 Tomcat8优化 2 JVM字节码 3 代码优化 .........
NULL 博文链接:https://fs20041242.iteye.com/blog/1483944
里面有两个 jvm的gc日志分析工具,解压后通过java -jar GChisto.jar和java -jar gcviewer-1.36-SNAPSHOT.jar的方式打开工具。
在这个代码可以调节JVM参数,打印JVM日志,调节GC算法
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
仅适用于以下 JVM 参数-verbosegc -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:logs/gc.log和 CMS 收集器。 使用 JDK 6 测试。 #总结报告示例 Total time: 20.51 min Young size ...
我们经常会遇到JVM运行时出错的情况。若能在启动时加入一些启动选项(startup option),便可以获取与bug相关的重要线索,从而有希望根治它们。但在实际操作时,我们总是忘记添加-XX:+HeapDumpOnOutOfMemoryError 或...
GC日志可视化分析工具GC...通过GC日志可视化分析工具,我们可以很方便的看到JVM各个分代的内存使用情况、垃圾回收次数、垃圾回收的原因、垃圾回收占用的时间、吞吐量等,这些指标在我们进行JVM调优的时候是很有用的。
1.1 重新认知JVM 1.2 GC优化 1.2.1 垃圾收集发生的时机 1.2.2 实验环境准备 1.2.3 GC日志文件 1.2.3.3 G1日志 1.2.