CPU使用率高问题定位

现象:测试反馈测试环境后台非常卡顿

分析:后台机器CPU使用率非常高,80%以上,

jdk8,redhat

1. top -C

2. top -Hp pid

3. printf "%x\n" 线程id

4. jstack 线程id | grep ‘0x41e8’ -C5 --color 或者 jstack 线程id > javacore.txt

5. 使用jca,分析javacore.txt


第4步,执行报错

 Unable to open socket file: target process not responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

加上 -F 还是报错

提示第一行显示“当前不能打开 socket file,导致不能获取目标进程的回复”。

java 程序启动后,默认(请注意是默认)会在 /tmp/hsperfdata_{user_name} 目录下以该进程的 id 为文件名新建文件,并在该文件中存储 jvm 运行的相关信息,其中的 user_name 为当前的用户名。

问题的本质是当前执行 jstack 命令用户名和 java 程序启动的用户不一致,导致当前用户打不开如上的文件,我们可以通过 ps -ef | grep java 查看相应 java 程序的启动用户后,切换到对应用户后,再执行即可。

第5步,分析大部分处于Runnable的线程为HandshakeCompletedNotify-Thread,建立TCP连接的场景,接着统计下TCP连接数和来源

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

tcpdump?

发现很多连接,且连接来源为漏洞扫描平台,最终定位到了原因:有Web扫描在进行中,使用账密登录后对系统的所有url(controller等)进行参数重组等尝试xss等攻击,占用了机器CPU

最终停止了扫描,系统恢复正常。

你可能感兴趣的:(CPU使用率高问题定位)