【发布时间】:2010-11-23 04:34:52
【问题描述】:
所以我们的 J2EE 应用程序像这样使用 Log4j
public class CustomerController
{
private static Logger logger = Logger.getLogger(CustomerController.class);
public CustomerService customerservice = null;
public CustomerController() throws Exception
{
PropertyConfigurator.configureAndWatch("c:\log4j.property", 50000);
customerservice = ServiceManagerSingleton.getCustomerServiceInstance();
}
}
这样我们可以实时更改日志级别。非常便利。我们的大多数类都像这个控制器一样设置。我们使用单例模式,这样我们只有一个 eash 类的实例;为每个类调用一次 PropertyConfigurator.configureAndWatch()。
问题:大约每周两次,我们的应用服务器会死掉并创建一个堆转储。使用 IBM 的 Heap Analyzer 我们可以看到似乎有很多与 Log4j 相关的线程:
808 (0%) [200] 9 org/apache/log4j/PropertyWatchdog 0x14282ad8
总共大约 30,000 个。所以这可能是突然崩溃的原因。
- 我们的设置是否正确?
- 重新部署 EAR 后,所有这些线程会发生什么情况?
【问题讨论】:
标签: java jakarta-ee log4j