1

我一直在寻找这个问题的答案。在我工作的公司中,我们有一个高度并发的系统,但最近发现 Web 服务器 (Jboss) 的日志配置包括控制台附加程序。应用程序记录器也将进入控制台。我们开始在日志记录操作上遇到死锁,其中大部分是控制台附加程序(我知道 Log4j 有一个非常讨厌的 sincronization 错误,但我几乎可以肯定我们在相关代码中没有任何 sincronization 方法)。另一件事是,IT 人员定期使用 putty 控制台访问控制台,暂停以检查日志,然后关闭 putty 窗口。

控制台附加程序以及在生产环境中使用控制台进行日志记录和监控是否可能导致系统出现死锁和竞争条件?我的理解是,控制台应该只在使用 IDE 的开发阶段使用,因为在高度并发的系统上,它将是另一种资源(由于无缓冲的 I/O 而变得很慢)受到竞争条件的影响。

谢谢。

4

1 回答 1

3

来自性能优化 JBoss Enterprise Application Platform 5 的最佳实践,第 9 页

在生产环境中关闭控制台日志记录

降低日志记录的详细程度

使用异步日志记录。

使用 If(debugEnabled()) 包装调试日志语句

我强烈建议在生产中首先考虑和最后考虑,因为 Log4J 中的一个错误会在记录之前计算要记录的内容,即如果MyClass#toString()是繁重的操作,Log4J 将首先计算这个String之前(是的,它会执行繁重的操作)然后它会检查是否String必须记录(非常糟糕,确实=)。

另外,告诉 IT 人员less在检查日志文件时使用该命令,以免阻塞文件,不要直接检查控制台 =。此命令适用于 Linux,如果您的服务器在 Unix 环境中,则该命令将是tail(基于@Toni 的评论)。


IMO,我认为官方的 JBoss 性能指南是停止在生产中使用控制台登录的最佳证明(即使这仍然不能证明您的死锁问题)。

于 2013-02-19T04:53:03.503 回答