线程阻塞案例分析
线程阻塞案例分析
一.Jstack打印快照
1.jmeter运行压测脚本
2.用jstack打印快照,下载到本地
jstack 112759 > log1.txt
jstack 112759 > log2.txt
jstack 112759 > log3.txt
3.在本地搜索是否有blocked关键字
二.分析代码
1.下载源码文件
cn.testfan.perf.beihe.pinter.http.CaseController.block(CaseController.java:60)
根据提示,找到casecontrokker的路径
/usr/src/tomcat-pinter/webapps/pinter/WEB-INF/classes/cn/testfan/perf/beihe/pinter/http
2.分析代码出错地方
打开jd-gui查看源码60行
发现没有加锁的表示:synchronized,但是此行调用了loger方法
3.去下载log4j的文件
路径:/usr/src/tomcat-pinter/webapps/pinter/WEB-INF/lib
下载这个文件到本地
根据提示路径:
at org.apache.log4j.Category.callAppenders(Category.java:204)
三.优化代码
调整log4j日志等级
1.找到log4j日志配置文件
路径:/usr/src/tomcat-pinter/webapps/pinter/WEB-INF/classes
2.调整日志等级
vi log4j.properties
提升日志等级为 ERROR