10

在我们的一个客户安装中,我们遇到了数千次相同的异常。在大量记录良好的堆栈跟踪(9332)之后,仍然记录了异常的发生,但没有堆栈跟踪。重新启动 java 进程后,同样的事情:这次我们有 17858 个堆栈跟踪,然后只有异常发生本身。

这里有一个类似的问题,但没有答案......

它是 log4j 功能还是错误?(我相信前者,因为我真的很喜欢那些 apache 家伙所做的)

有任何想法吗?

4

2 回答 2

24

使用 Java 5 或更好?

然后你会看到:

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

Java 5 发行说明提供。

于 2009-07-17T08:36:53.540 回答
1

对我来说听起来像是一个特性,至少如果堆栈跟踪确实是相同的。为什么要在不获取更多信息的情况下使日志更大(因此更难搜索)?将检查此功能的可配置性...

编辑:我查看了 log4j 代码,没有任何痕迹。这强烈表明罗伯特的答案是正确的。不错的 VM 功能 IMO :)

于 2009-07-17T08:31:45.000 回答