在调试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