关于现场的一次线程阻塞

记一次现场业务阻塞,执行时间长的问题

要客户打了一个线程栈,发现有十几个被阻塞的线程,大家都在等待8080-14线程(运行状态)

看线程栈貌似是一条业务的error日志导致线程阻塞,其实查看服务器的堆栈,有loadclass的字眼,像是累加载卡住了,查看其他被阻塞的线程也是在loadclass

 

估计是日志里面的信息会触发什么类的加载了,但是并不是死锁,不像是交叉加载,可能只是读取jar中的文件,读取较慢,多个线程只能同时加载一个类,所以其他的线程只能等某个线程加载完,就是正常的加载阻塞

判断:

1 可能和机器有关,本身IO特别慢,然后可能就是应用写的结构有问题,触发了很多竞争性的加载

2 jdk8以上是支持并行加载的,用jdk1.8可能会避免这种问题,并行加载可以多个线程加载不同的class而不会相互阻塞 

3  能查到卡在加载那些class上的话,也可以让应用提前加载下这些类,减少运行时的竞争(应用方解决)

posted on 2021-04-23 15:34  sina-p  阅读(75)  评论(0)    收藏  举报

导航