频道栏目
首页 > 数据库 > MySQL > 正文
使用apache log解决高并发下log4j引起大量线程block问题
2016-09-05 09:54:12         来源:Mr_Smile2014的博客  
收藏   我要投稿

由于项目用户量比较大,测试同事采用两百并发进行测试,在测试查过程中,查看jvm虚拟机发现很多日志线程出现BLOCKED,

结果如下:

"http-saoma%2F192.168.6.162-8097-184" daemon prio=10 tid=0x00002aaab0ecc800 nid=0x2d7a waiting for monitor entry [0x0000000045fa9000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at org.apache.log4j.Category.callAppenders(Category.java:204)
	- waiting to lock <0x00000007800020a0> (a org.apache.log4j.spi.RootLogger)
	at org.apache.log4j.Category.forcedLog(Category.java:391)
	at org.apache.log4j.Category.log(Category.java:856)
	at org.slf4j.impl.Log4jLoggerAdapter.info(Log4jLoggerAdapter.java:304)

通过日志结果可以看出问题是出在org.apache.log4j.Category.callAppenders方法中。

我们从上面可以看出在该方法中有个synchronized同步锁,同步锁就会导致线程竞争,那么在大并发情况下将会出现性能问题,同会引 起线程BLOCKED问题。

那怎样解决这个问题呢?

我们可以使用Apache log 解决这个问题,代码如下:

private static final Log log = LogFactory.getLog("xxx");  
通过测试发现,以前org.apache.log4j.Category.callAppenders线程BLOCKED问题没有了。大家以后遇到这个问题可以采取这个方式解决。

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 发下 线程 问题
上一篇:MySQL学习----)第二练:语句初步(SQL概述、数据定义、查询)
下一篇:MySQL的Replaceinto与Insertintoonduplicatekeyupdate真正的不同之处
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站