Linux 性能優化排查工具

下圖1爲 Linux 性能優化排查工具的總結

 

圖1

診斷 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

圖2

圖2

top

top命令可以實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過top命令所提供的互動式界面,用熱鍵可以管理。

語法

top [選項]

選項

-b:以批處理模式操作; 
-c:顯示完整的治命令; 
-d:屏幕刷新間隔時間; 
-I:忽略失效過程; 
-s:保密模式; 
-S:累積模式; 
-i<時間>:設置間隔時間; 
-u<用戶名>:指定用戶名; 
-p<進程號>:指定進程; 
-n<次數>:循環顯示的次數。 

圖3

圖3

在 Linux 命令終端輸入 top 後屏幕將會顯示如圖3顯示的信息,那麼這些信息顯示的是什麼意思呢?下面將針對每行信息進行回答。

如下圖4所示,紅框區域所顯示信息爲系統統計信息,黃框顯示信息爲進程信息 圖4

圖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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章