線上服務模塊CPU和RAM內存都出現了異常,記錄一下自己的分析過程:
1.確定線上環境os是linux-debian9.3
2.確定web容器采用的是jetty9.4版本
3.先用top分析當前系統內存和cpu的占用情況
先查看下是否有緩存占用了物理內存
輸入指令: free -h total used free shared buff/cache available Mem: 11G 10G 168M 510M 926M 316M Swap: 7.9G 502M 7.4G
1)先top,然后m切換內存使用情況圖表
top - 11:31:03 up 2 days, 14:51, 2 users, load average: 21.71, 20.58, 19.47 Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie %Cpu(s): 25.6 us, 43.3 sy, 0.0 ni, 31.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 91.5/16305244 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ] KiB Swap: 0.0/16777212 [ ] PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5295 root 20 0 9937420 878068 18684 S 128.0 5.4 52:31.03 java 5512 root 20 0 9778.5m 887436 17816 S 128.0 5.4 4505:13 java 4261 root 20 0 9994704 1.513g 18272 S 127.7 9.7 4512:04 java 3326 root 20 0 9831.6m 1.540g 18244 S 118.7 9.9 4501:25 java 3751 root 20 0 9851.2m 1.087g 18532 S 0.7 7.0 23:09.35 java 5740 root 20 0 8865332 740708 17792 S 0.3 4.5 3:08.60 java 14968 root 20 0 44948 3748 3080 R 0.3 0.0 0:00.07 top 1 root 20 0 204376 5740 4348 S 0.0 0.0 0:03.93 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.58 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 1:19.28 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.26 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 14 root rt 0 0 0 0 S 0.0 0.0 0:00.22 watchdog/1 15 root rt 0 0 0 0 S 0.0 0.0 0:00.09 migration/1 16 root 20 0 0 0 0 S 0.0 0.0 0:00.51 ksoftirqd/1 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2 20 root rt 0 0 0 0 S 0.0 0.0 0:00.21 watchdog/2 21 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/2 22 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/2 24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/2:0H 25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3 26 root rt 0 0 0 0 S 0.0 0.0 0:00.20 watchdog/3 27 root rt 0 0 0 0 S 0.0 0.0 0:00.09 migration/3 28 root 20 0 0 0 0 S 0.0 0.0 0:00.51 ksoftirqd/3 30 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/3:0H 31 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/4 32 root rt 0 0 0 0 S 0.0 0.0 0:00.21 watchdog/4 33 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/4 34 root 20 0 0 0 0 S 0.0 0.0 0:00.38 ksoftirqd/4 36 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/4:0H 37 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/5 38 root rt 0 0 0 0 S 0.0 0.0 0:00.20 watchdog/5 39 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/5 40 root 20 0 0 0 0 S 0.0 0.0 0:00.35 ksoftirqd/5 42 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/5:0H 43 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/6 44 root rt 0 0 0 0 S 0.0 0.0 0:00.20 watchdog/6 45 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/6 46 root 20 0 0 0 0 S 0.0 0.0 0:00.40 ksoftirqd/6
4.分析最占內存的web服務
1)top 然后在輸入大寫M自動根據內存的大小排序
2)top 然后在輸入大寫P自動根據CPU使用的情況排序
5.查詢到進程信息后,獲取到當前的進程PID
4261 root 20 0 9994704 1.513g 18272 S 127.7 9.7 4512:04 java
6.根據PID查詢到WEB服務對應的端口信息,然后就知道了4261對應的web服務端口為9180
命令:
輸入指令:netstat -ntlp;
tcp 0 0 0.0.0.0:9180 0.0.0.0:* LISTEN 4261/java
7.然后通過java自帶的工具來導出pid對應的dump文件信息
輸入指令: jmap -dump:format=b,file=/home/ifaces/9180.dump 4261
8.將文件下載到本地分析,我使用的是debian開發環境,所以直接用sftp來下載文件:
輸入指令: sftp root@xxx.123.xxx.150 輸入密匙進入
9.將生成的dump下載到本地
sftp> get /home/ifaces/9180 /work/dump
10.然后在控制台輸入 jvisualvm調用java自帶的dump分析工具來分析dump的文件內容信息
輸入指令:/workbench/visualvm_141/bin$ ./visualvm
11.利用jvisualvm就可以看到堆的信息了