记录一次线上tomcat失去响应问题处理

Posted 超自然现象研究所

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次线上tomcat失去响应问题处理相关的知识,希望对你有一定的参考价值。

问题描述:网站失去响应,进程还在。

  1. 首先判断是否出现频繁报错,排除运行时异常导致的失败。

  2. 使用jps 找出对应的进程pid

  3. 使用top -Hp [pid]命令查看当前进程下的所有线程信息。

  4. 查找cpu负载最高的线程 如上图 load average代表负载系数(1分钟,5分钟,15分钟)。负载系数<=1*cpu核数属于正常范围。之前进程总占用一直是200%。

  5. 通过 jstack -l [pid] | >1.txt打印栈信息找出占用cpu最大的线程对应的方法。

  6. 将线程pid转16进制,找出Thead.state:BLOCKED 的线程进行优化。

  7. 这里我们使用了任务队列存取数据,对线程内部while(true)进行wait和notify操作(注意:sleep不会释放cpu的使用权)等一系列优化后cpu稳定下来。

  8. 运行程序后经过3个小时tomcat再次失去响应。统计tcp连接信息发现出现大量的close_wait。想起之前给tomcat添加的线程池初始化参数(minSpareThreads)过大,tomcat线程难以回收导致,尝试修改后tcp连接正常。


ps:记录于此,以供参考。

以上是关于记录一次线上tomcat失去响应问题处理的主要内容,如果未能解决你的问题,请参考以下文章

记一次线上故障处理

一次线上tomcat应用请求阻塞的排查经过

记一次线上压测Dubbo线程池队列满的问题

记一次线上FGC问题排查

记录一次线上线程池爆了的问题

一次线上kafka消费问题排查