问题描述
手下一个项目,日志中存在以下没有任何堆栈信息的异常:
这是Hotspot虚拟机的fast throw机制对抛出异常的优化导致。当nullpointer、除零等异常在相同位置抛出一定多次后,优化机制会去掉堆栈信息缩短抛出流程的时间。
solution
增加启动参数:-XX:-OmitStackTraceInFastThrow。例:
- 命令行方式
java -XX:-OmitStackTraceInFastThrow -classpath . NpeThief
- tomcat启动参数
Environment='CATALINA_OPTS=-Xms512M -Xmx2048M -server -XX:+UseParallelGC -XX:-OmitStackTraceInFastThrow'
参考
1.http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-their-stack-traces-in-production-and-the-fix/
2.https://stackoverflow.com/questions/16568253/difference-between-jvm-and-hotspot
网友评论