服务器CPU满载
查看25831进程服务
ps 25831
由于这个Java服务是采用Docker容器技术部署的,所以需要进入Java服务对应的容器当中去
docker exec -it medical-search-service /bin/bash
查看容器中top命令,获得Java服务pid=7
或者采用jps命令,同样获取Java服务pid=7
root@38af534c453a:/# jps -lv
386 sun.tools.jps.Jps -Dapplication.home=/usr/lib/jvm/java-8-openjdk-amd64 -Xms8m
7 medical-search-admin.jar
查找进程pid=7占用率高的线程
top -H -p 7
从上图获取CPU占用率最高的线程编号:66(十进制),然后转化为16进制,其结果:42,记住这个数字,后面要用到
[root@msnode3 ~]# printf "%x\n" 66
42
导出执行堆栈,当前位置容器根目录下面:/
jstack 7 >> error.txt
然后cp到宿主机上,然后下载到本地分析,或者直接采用命令查看也可以
docker cp medical-search-service:/error.text /opt/module/medical-search-service/
查找其线程:0x42,便能找到导致CPU满载的原因:这次故障是导出的时候一个工具类导致的(位置:ExcelUtils.java:109),然后分析其代码