oc4j和log4j的产生的化学反应

2010-05-27  毕泽明 

这段时间,在单位这里一个项目是部署在oc4j下,因为之前没有用log4j写日志,产生的日志很庞大,也不能按日生成,于是将所有的输出改为了log4j的输出——不同级别输出到不同的日志文件中。
当改完后简单测试发现生效,于是很快就换版了。
但是第二天马上报障过来,说登录不了。

第一时间,我觉得log4j是一个非常成熟日志输出方案,现在出现问题,实在太意外了。我就决定用压力测试尝试定位问题。

很快录制好脚本,设好场景,开压,结果不到2分钟,发现日志输出终止。手工登录系统,一条System.out的输出打印到控制台之后,就没有输出了。这个时侯就打算用jprofiler来监控jvm情况的,结果很遗憾,配不起来,说我的license有问题,一时半刻也配不起来jprofiler监控环境的了,该怎么办。这个时侯我想起了它,kill命令。kill -3可以看到jvm的快照。执行kill -3 pid之后,马上将jvm的快照给dump出来了——在控制台显示了,原来oc4j的一个内部和log4j的一个类产生死锁了。

之后不断调试,比如说,不按级别输出到不同日志文件,在进行压力测试,发现此问题消失。
调试启动脚本,不定向到日志文件,保留换版的log4j配置——不好意思,想不起来结果如何了。。。

问了不少高手,有高手说到oc4j也是用log4j输出日志的吧?一言惊醒梦中人。之后不断调试log4j的配置,终于搞定。
用lr压足两个小时,依然坚挺,不错,问题解决。
494°/4946 人阅读/0 条评论 发表评论

登录 后发表评论