web服务运行时,如果发生各种卡顿和假死,该如何去排查
检查服务器磁盘情况
使用df
或者free
命令查询磁盘情况
服务器磁盘空间不足时,会导致某些要写入磁盘的方法阻塞,可能会导致服务不可用。
解决方法:清理磁盘不需要的文件,或者扩容。
查询服务器内存和cpu使用情况
使用top
命令查看运行内存和cpu消耗
- 如果有非java程序占用了较高的cpu和内存,则排查该程序是否正常。是否是其他外部因素占用了服务器大量资源。
- 系统内存MEM内存不足,排查各个服务占用内存情况。
- 在没有其他服务干扰情况下,使用jstat命令或者jmap命令查看java内存使用情况,是否内存不足。
- 如果JAVA程序的CPU占用过高,则进行接下来排查java服务原因
java占用cpu过高时,使用PID和jstack命令查询实际方法栈情况。
使用PID查看线程占用情况
top -pPID
-H
查出有问题的线程
jstackPID
| grep -A 100线程的16进制号
如jstack 8073 | grep -A10 1f8a(8074的16进制)
排查出有问题线程的代码定位。
定位之后查看程序代码如何引发的。
查看数据库情况
数据库超时或者阻塞,也会造成web服务的无法响应。
使用数据库命令查询
SELECT * FROM information_schema.INNODB_TRX
查询出数据库阻塞情况,是否有很多事务在等待,导致服务卡死。
找出阻塞语句,排查程序卡死原因。