502 Bad Gateway 引起的反思 续
您目前处于:编程  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 (文/张松然)