没有堆栈跟踪的重复异常 - 如何重置?

2022-08-31 15:26:14

在我的应用程序日志(使用log4j)中,我看到一个NullPointerException,但没有堆栈跟踪。我知道作为一种优化,当异常多次发生时 - jvm停止生成堆栈跟踪。问题是前段时间发生了异常,并且我的所有日志都填充了异常,而没有堆栈跟踪。有没有办法“重置”此机制,以便下一个抛出的异常将与完整的堆栈跟踪一起打印?我不想重新启动应用程序,因为很难重现此错误,并且重新启动可能会导致“消失”...

谢谢!


答案 1

尝试使用以下 JVM 属性运行:

-XX:-OmitStackTraceInFastThrow

发行说明中

服务器 VM 中的编译器现在为所有“冷”内置异常提供正确的堆栈回溯。出于性能目的,当多次引发此类异常时,可能会重新编译该方法。重新编译后,编译器可能会使用不提供堆栈跟踪的预分配异常来选择更快的策略。要完全禁止使用预分配的异常,请使用以下新标志:。-XX:-OmitStackTraceInFastThrow


答案 2