JVM调试技巧

增加Error Stack Trace长度

在调试JVM程序的时候经常会看到类似这样的错误堆栈日志。

com.pingcap.tikv.expression.ComparisonBinaryExpression.accept(ComparisonBinaryExpression.java:115)
 at com.pingcap.tikv.expression.visitor.RangeSetBuilder.buildRange(RangeSetBuilder.java:130)
 at com.pingcap.tikv.predicates.PredicateUtils.expressionToPoints(PredicateUtils.java:124)
 ... 120 more

JVM具有1024个条目的人为限制,超过1024条后会显示... XXX more,导致无法追溯到触发错误的原始代码。幸运的是,有一个标志允许增加这个限制。只需运行你的程序与以下参数:

-XX:MaxJavaStackTraceDepth=1000000

这将打印多达100万条的堆栈跟踪,这应该是足够的。也可以将此值设置为-1,将条目数设置为unlimited。

This list of non-standard JVM options提供更多的细节:

Max. no. of lines in the stack trace for Java exceptions (0 means all).
With Java > 1.6, value 0 really means 0. value -1 or any negative number must be specified to print all the stack (tested with 1.6.0_22, 1.7.0 on Windows).
With Java <= 1.5, value 0 means everything, JVM chokes on negative number (tested with 1.5.0_22 on Windows).

#在JVM运行时开启GC日志

-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintGCDetails

参考

持续更新。。。

Written on April 25, 2019