您目前处于:笔记
2015-01-23
|
今天线上又发现 502 Bad Gateway 的现象,但奇怪的是没有方法可用率报警,检查发现,线程数上线,但没有方法异常! 在毫无头绪之际,突然想到查看 jstack,日志如下: 发现程序的线程全部处于 BLOCKED 状态!等了一会,在查看 jstack,日志如下: 发现 BLOCKED 状态消失了,都变成了 TIMED_WAITING 状态! 仔细分析日志,发现线程都在 waiting for 同一个地址空间,这说明程序里使用了锁! 查看程序原代码,示例代码如下: public void connect(String session) throws Exception { final ReentrantLock runLock = this._lock; runLock.lock(); try { doSomething(); } finally { runLock.unlock(); } } 由于使用了锁,重启堆积的线程数造成了资源抢占,所以同样造成了之前的影响! 本文受原创保护,未经作者授权,禁止转载。 linkedkeeper.com (文/张松然) ©著作权归作者所有 |