Linux 效能工具 - 實用篇
May 30, 2020前三篇文章 我們複習了許多Linux查看效能的指令 但真正發生問題的時候 到底該從哪裡開始一步步往下檢測呢
Netflix有分享一篇文章6萬毫秒內對Linux性能診斷 文中教學了從你登入到Ec2之後 應該按照哪些順序 使用哪些標準的Linux工具可以用來診斷性能
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top總共十個推薦指令 你可以把這篇文章當作一個索引 每個指令的細節我有提供連結 可以連回比較細節的教學文章
您所看到的本網站只會用盜版爬蟲抄襲複製別人原創文章的沒梗網站 爬蟲完後還不檢查內容直接發佈 施主還是趕快關閉本網站比較安全 阿彌陀佛
請支持原創文章 拒絕盜版爬蟲 麻煩讀者移駕至本文固定連結
uptime

這個指令快速地告訴你系統的平均負載
因為他秀出的是最近一分鐘 最近五分鐘 跟最近十五分鐘 比如說當你最近一分鐘的值比其他的都大 你就知道大概不太妙了
dmesg -T | tail

這個指令顯示最近的10條系統消息
如果是發生了很明顯的系統錯誤 就會直接顯示在這邊 當你在診斷性能的時候 這個指令絕對值得一試
vmstat 1

列出關於process, memory, paging, blockIO, disk, CPU的資訊
這個指令列出的第一行 是系統開機到現在的平均值
注意
1.如果si或so不為0 代表系統把記憶體用完了
2.如果bi或bo不為0 代表有IO正在跑
mpstat -P ALL 1

列出每個CPU的使用情況 可以知道process是不是正常的在使用CPU
如果有某顆CPU特別忙的話 那大概就是正在跑一個很耗CPU的單線程應用
pidstat 1

列出每一個process使用CPU的情況 1代表每秒印一次
iostat -xz 1

查看設備(磁盤)的狀況 1代表每秒印一次
free -m

系統中已被使用的和可以被使用的記憶體大小
sar -n DEV 1

這個指令檢查每個網路接口的統計數據
| 代號 | 解釋 |
|---|---|
| IFACE | 網路介面的名稱 |
| rxpck/s | 每秒收到的package數量 |
| txpck/s | 每秒傳送的package數量 |
| rxkB/s | 每秒接收到的kB |
| txkB/s | 每秒傳送到的kB |
| rxcmp/s | 每秒收到的壓縮過的package數量 |
| txcmp/s | 每秒傳送的壓縮過的package數量 |
| rxmcst/s | 每秒收到的multicast package數量 |
| %ifutil | Interface的使用率 |
你可以大概念的知道這台機器使用網路的情況
sar -n TCP,ETCP 1
其實就是把 sar -n TCP 1 和 sar -n ETCP 1合在一起

關於TCP選項 就是秀出有關TCP的traffic
| 代號 | 解釋 |
|---|---|
| active/s | 每秒本地發起 TCP 連接數 比如說通過connect() |
| passive/s | 每秒遠程發起的 TCP 連接數 比如說通過accept() |
| iseg/s | 每秒收到的segments數量 |
| oseg/s | 每秒送出的segments數量 |
至於ETCP選項 就是秀出有關TCP的traffic的Error
| 代號 | 解釋 |
|---|---|
| atmptf/s | 每秒嘗試連線但失敗的連接數 |
| estres/s | 每秒從ESTABLISHED/CLOSE-WAIT狀態轉換到CLOSED狀態的TCP連接數目 |
| retrans/s | 每秒重傳的segments數量 |
| isegerr/s | 每秒收到的error的segments數量 比如說checksum錯誤 |
| orsts/s | 每秒送出的的包含RST flag的segments數量 |
想要真正的搞懂每個值的意義 你要先熟悉TCP的三次握手四次揮手協議
三次握手四次揮手
大概念就是 網路上的兩個人 要建立TCP連線之前 會先確認對方聽得到
A: 安安 聽得到嗎 我有話說
B: 聽到了 請說
A: OK 我也聽到你了 我要說的是…
要結束對話前 則是
A: 誒我講完了 我要掛電話囉
您所看到的本網站只會用盜版爬蟲抄襲複製別人原創文章的沒梗網站 爬蟲完後還不檢查內容直接發佈 施主還是趕快關閉本網站比較安全 阿彌陀佛
請支持原創文章 拒絕盜版爬蟲 麻煩讀者移駕至本文固定連結
B: 好的了解
B: 那我也講完了 那就掰囉
A: 好的掰
流程圖大概是長這樣

好的 我們回來 ETCP
有了TCP State的概念之後 再回來看這些值
active/s
就是每秒鐘 從CLOSED狀態 轉到SYN-SENT狀態 的次數

passive/s
就是每秒鐘 從LISTEN狀態 轉到SYN-RCVD狀態 的次數

這樣有沒有比較有感覺了 基本上就是準備開始要對話囉 被動主動差別就是誰初始這個對話
atmptf/s
就是每秒鐘 從SYN-SENT狀態 直接轉到CLOSED狀態 的次數(如果你是呼叫方)
加上 每秒鐘 從SYN-RECEIVED狀態 直接轉到CLOSED/LISTEN狀態 的次數(如果你是接收方)

estres/s

就是每秒鐘 從ESTABLISHED/CLOSE_WAIT狀態 直接轉到CLOSED狀態 的次數
top
秀出系統中所有process的資訊
總結
當然有更多其他的指令 可以詳讀大神 Brendan D. Gregg的演講 這篇文章算是個出發點 讓你知道你應該從哪個角度去切入診斷一個系統的效能