Linux性能调优

CPU占用过高

首先,通过top -c指令查看进程的cpu占用情况,找到cpu占用高的进程pid;

然后,通过top -Hp [pid]指令查看进程内线程运行情况,找出cpu占用高的线程pid;

root@iZ2ze4k1o3ish3waeplqi8Z:~# top -Hp 14933
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14965 root 20 0 2449044 493880 15588 S 0.3 24.1 0:05.92 java 14982 root 20 0 2449044 493880 15588 S 0.3 24.1 0:02.76 java 14984 root 20 0 2449044 493880 15588 S 0.3 24.1 0:18.18 java 14985 root 20 0 2449044 493880 15588 S 0.3 24.1 0:02.45 java 14999 root 20 0 2449044 493880 15588 S 0.3 24.1 0:13.40 java

假设第一个线程14965占用cpu最多,将[pid]=14965转换成16进制0x3a75

root@iZ2ze4k1o3ish3waeplqi8Z:~# printf "%x\n" 14965
3a75

最后,打印进程堆栈,过滤线程pid,查看线程栈,找出执行任务:

root@iZ2ze4k1o3ish3waeplqi8Z:~# jstack 14933 | grep '0x3a75' -C5 --color
"nioEventLoopGroup-2-1" #27 prio=10 os_prio=0 tid=0x00007fe5b890b800 nid=0x3a75 runnable [0x00007fe587802000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)

本例为虚拟例子,所以当前执行的任务是poll()。

端口占用

netstat -lap | grep 8051

lsof -i :8051

root@iZ2ze4k1o3ish3waeplqi8Z:~# netstat -lap | grep 8051
tcp 0 0 *:8051 *:* LISTEN 14933/java
tcp 0 0 172.17.134.10:8051 172.17.134.96:55014 ESTABLISHED 14933/java
tcp 0 0 172.17.134.10:8051 172.17.134.96:51712 ESTABLISHED 14933/java
tcp 0 0 172.17.134.10:8051 172.17.134.9:56656 FIN_WAIT2 -
tcp 0 0 172.17.134.10:8051 172.17.134.9:56652 ESTABLISHED 14933/java
tcp 0 0 172.17.134.10:8051 172.17.134.11:44974 ESTABLISHED 14933/java

root@iZ2ze4k1o3ish3waeplqi8Z:~# lsof -i:8051
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 14933 root 35u IPv4 43755096 0t0 TCP 172.17.134.10:8051->172.17.134.9:56652 (ESTABLISHED)
java 14933 root 36u IPv4 43719121 0t0 TCP *:8051 (LISTEN)
java 14933 root 48u IPv4 43719551 0t0 TCP 172.17.134.10:8051->172.17.134.96:51712 (ESTABLISHED)
java 14933 root 59u IPv4 43751694 0t0 TCP 172.17.134.10:8051->172.17.134.96:55014 (ESTABLISHED)
jmap -heap 14933
jmap -histo:live 14933 | more
ll /proc/14933/fd/
ll /proc/14933/task/
ll /proc/14933/task | wc -l