当项目上线后,作为一个后台开发选手,必备的技能之一就是当服务器出现故障时,查看服务器进程及各种参数,然后排查问题。
第一步,根据应用端口号查看应用进程
ps -ef |grep 111111
1
结果如下:
注意观察CPU、内存参数,百分比,绝对数值越高说明服务器压力越大,但并不代表挂了。
当然,如果长时间维持在较高水平,即便没挂,也说明离挂不远了。
第二步,查看服务器日志
查看应用服务器日志,观察是否存在 full gc。
tail -500f xxxxx.log
1
如果出现长时间的full gc,你也要小心了。
这时,需要继续检查。
第三步,查看应用进程下cpu或者内存使用率非常高的线程
top -H -p 11111 # 11111是第一步查出来的应用进程
1
结果如下:
如果cpu或者mem长时间保持在99%,说明这个线程占用了大量资源。
这时需要把服务器内存堆栈日志下载下来。
第四步 下载堆栈日志
jstack -l 11111 > xxx.stack // 11111是第一查出来的应用进程
1
这个命令可以把堆栈日志下载到xxx.stack的文本文件中。
xxx.stack是一个文本文件,就在当前目录下,你可以把他下载到电脑硬盘,用文本工具打开。
第五步 查找导致高使用率的原因
通常第三步找到的高使用率的线程就是导致服务器高压力的原因。
在第四步下载的日志文件中查找改线程的ID,要注意的是,通过名称看到屏幕的id是十进制的,而下载的文本日志中的ID是十六进制的,需要把十进制转换成十六进制的数字,才能搜索到。
如果能够在堆栈日志中搜索到改线程ID,就可以找到导致服务器压力大的原因。