真实项目-高并发项目如何debug
真实项目-高并发项目如何debug
背景介绍
今天公司项目日志里发现有两个空指针异常,立刻引起注意,虽然没影响到程序的整体情况,但要引起重视,于是就开始排查代码,
这个工作量很大,效果不明显,兄弟们在继续排查代码,我就想用debug的方式来解决,但是最少时也有 100多个线程在同时跑这一部分代码,
不想个办法肯定是行不通的,于是我就做了一个小的调整,瞬间把高并发的多线程变成排队单线程执行,问题很快就被定位了。
实现原理
我们用的是线程池技术,就是会把将要执行的任务放到线程池里执行,我们可以把不放入线程池里执行的任务,直接调用业务逻辑,这样就可以变成
单线处理了,具体代码如下:
改动前:
threadPool.execute(waterAirPullTask);
改动后:
try {
waterAirPullTask.accessToData();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// threadPool.execute(waterAirPullTask);
其中: accessToData() 是业务方法,在改动后我们是直接调用,改动前的正常逻辑应该是有线程调用
浙公网安备 33010602011771号