下圖1爲 Linux 性能優化排查工具的總結
診斷 CPU 工具
查看 CPU 核數
總核數 = 物理CPU個數 X 每顆物理CPU的核數
總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l
或者 top 後按 1,第三行開始數有幾個CPU 就是幾個邏輯CPU 如圖2只有一個邏輯CPU0
top
top命令可以實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過top命令所提供的互動式界面,用熱鍵可以管理。
語法
top [選項]
選項
-b:以批處理模式操作;
-c:顯示完整的治命令;
-d:屏幕刷新間隔時間;
-I:忽略失效過程;
-s:保密模式;
-S:累積模式;
-i<時間>:設置間隔時間;
-u<用戶名>:指定用戶名;
-p<進程號>:指定進程;
-n<次數>:循環顯示的次數。
在 Linux 命令終端輸入 top 後屏幕將會顯示如圖3顯示的信息,那麼這些信息顯示的是什麼意思呢?下面將針對每行信息進行回答。
如下圖4所示,紅框區域所顯示信息爲系統統計信息,黃框顯示信息爲進程信息
系統統計信息
第一行:top - 02:17:40 up 53 days, 5:15, 1 user, load average: 0.02, 0.04, 0.01
- 02:17:40 表示系統當前時間。
- up 53 days, 5:15 up 是 uptime 的意思表示當前系統運行的時長,圖4 系統運行時長爲 53天5小時15分鐘。
- 1 user 就很簡單了表示當前只有一個用戶連接。
- load average 是看性能的時候比較重要的一個指標表示系統負載,也就是任務隊列的平均長度,後面三個數分別表示1分鐘、5分鐘、15分鐘。如果是單cpu當這個值超過1的時候需要檢查系統是否出現異常,這個值當超過5的時候基本上系統已經處於死機狀態。
關於 load average 推薦閱讀阮一峯的文章:http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html
第二行:Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
用於統計系統上進程信息,119 total 表示系統中總進程數爲119,1 running 表示當前正在運行的進程有一個, 118 sleeping 表示當前休眠的進程有 118 個, 0 stopped 表示當前停止的進程, o zombie 表示殭屍進程
第三行:Cpu(s): 0.3%us, 0.7%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
這裏默認顯示所有 CPU 的總狀態,按下 1 鍵即可顯示所有邏輯 CPU 狀態。
- us(userspace) 表示用戶空間佔用CPU時間百分比。
- sy 表示內核空間佔用CPU時間百分比。
- ni 明白 ni 之前需要先了解一個知識點,Linux 系統通過 nice 值來設置進程優先級 nice 值越高優先級越低,nice 可以被手動設置, ni 在這裏就表示被手動設置過 nice 值的進程佔用 CPU 時間百分比。
- id 就是 idle 表示 CPU 空閒時間的百分比,
- wa 就是 waiting 的意思表示 CPU 在等待 I/O 上花費的時間百分比,
- hi 全稱是 hardware interrupts 表示 CPU 處理硬件中斷花費的時間百分比,比如在鍵盤上敲一個鍵。
- si 全稱是 software interrupts 軟件通過發出特殊 CPU 指令中斷,表示 CPU 在處理軟件中斷花費的時間百分比。
- st 全稱是 steal time(被偷走的時間) CPU 花費在虛擬機上的時間百分比。
第四行:Mem: 520132k total, 254340k used, 265792k free, 24916k buffers
Mem 就是內存信息,其他都是字面意思
- total — 物理內存總量
- used — 使用中的內存總量
- free — 空閒內存總量
- buffers — 緩存的內存量
第五行:Swap: 135164k total, 7176k used, 127988k free, 105748k cached
swap交換分區信息
- total — 交換區總量
- used — 使用的交換區總量
- free — 空閒交換區總量
- cached — 緩衝的交換區總量
系統進程信息
- PID — 進程id
- USER — 進程所有者
- PR — 進程優先級
- NI — nice值。負值表示高優先級,正值表示低優先級
- VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
- RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
- SHR — 共享內存大小,單位kb
- S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=殭屍進程
- %CPU — 上次更新到現在的CPU時間佔用百分比
- %MEM — 進程使用的物理內存百分比
- TIME+ — 進程使用的CPU時間總計,單位1/100秒
- COMMAND — 進程名稱(命令名/命令行)
排查技巧
通過 top –H -p 查看運行時間較長線程
參考資料:
https://www.ibm.com/developerworks/cn/java/j-lo-performance-tuning-practice/index.html
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
https://www.booleanworld.com/guide-linux-top-command/
http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html