最近有两个系统先后被恶意扫描,出现 CPU 使用率高的现象。很好,把问题暴露出来解决掉。
CPU 使用率很高,首先是要找出 CPU 在执行什么样的代码,然后在分析这些代码有什么问题。
一、问题定位
1、 用命令 “ps aux | grep APP” 找出应用的进程 id:
801 84703 5.6 28.8 4627436 1132100 pts/2 Sl 11:08 11:19 /usr/jdk1.6.0_38/bin/java APP
2、 找出耗CPU的线程,在Linux系统下用命令:“ top –H –p pid ”
, pid 就是前面找出来的应用进程 ID 。这个命令会显示出当前占用CPU高的线程。
Tasks: 426 total, 0 running, 426 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.5%us, 0.6%sy, 0.0%ni, 72.3%id, 26.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3924912k total, 3308088k used, 616824k free, 768k buffers
Swap: 8388600k total, 3236720k used, 5151880k free, 12304k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
84784 appdeplo 20 0 4518m 1.1g 3816 S 0.4 29.0 0:00.85 java
84903 appdeplo 20 0 4518m 1.1g 3816 S 0.4 29.0 0:34.66 java
84983 appdeplo 20 0 4518m 1.1g 3816 S 0.4 29.0 0:00.99 java
85091 appdeplo 20 0 4518m 1.1g 3816 S 0.4 29.0 0:02.69 java
85164 appdeplo 20 0 4518m 1.1g 3816 S 0.4 29.0 0:04.92 java
84703 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:00.00 java
84704 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:00.42 java
84705 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:02.52 java
84706 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:02.64 java
84707 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:02.46 java
84708 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:02.39 java
84709 appdeplo 20 0 4518m 1.1g 3816 S 0.0 29.0 0:33.99 java
这里的 PID 比如 84784
是十进制的,需要转换为十六进制,用windows的计算器就可以转换了,转换为十六进制是:14B30
。