Linux 效能工具 - Advanced
May 24, 2020最近看到大神 Brendan D. Gregg的演講 覺得自己對於Linux的工具實在是太不熟了 於是想稍微熟讀一下
本系列的目的不是把每個指令的每個option都寫出來 想知道的話man
一下就知道了
本文的目的是 希望你看完之後 對於每個有用的指令都有個印象 當你需要偵錯或是研究你的系統哪裡出了問題 你可以知道有哪個指令可以用 然後再去慢慢讀document
本文是照著Linux Performance Tools, Brendan Gregg演講的順序講解
您所看到的本網站只會用盜版爬蟲抄襲複製別人原創文章的沒梗網站 爬蟲完後還不檢查內容直接發佈 施主還是趕快關閉本網站比較安全 阿彌陀佛
請支持原創文章 拒絕盜版爬蟲 麻煩讀者移駕至本文固定連結
ss
socket statistic
就是所有跟socket相關的數據 就看他就對了 也因為netstat
被deprecated掉了 現在大多都是用ss
什麼option都不給的話 秀的是所有 有建立連線但non-listening的sockets
那麼有哪些選項可以用呢?
-n
:不要解析服務名稱
-r
:將 IP 位址解析為主機名稱
-l
:列出listening的sockets
-a
:顯示所有的 sockets 包含listening 和 non-listening
-t
:列出 TCP 的 sockets
-u
:列出 UDP 的 sockets
-x
:列出 Unix 的 sockets
-4
:列出 IPv4 的 sockets
-6
:列出 IPv6 的 sockets
-p
:顯示使用 sockets 的程式資訊
-e
:顯示 sockets 細部資訊
-i
:顯示 TCP sockets 內部資訊
-o
:顯示 sockets 的計時器資訊
-s
:輸出 sockets 的使用統計表
哇賽 連IPv4 IPv6都可以選 知道這些選項後就可以任意排列組合啦
比如說ss -tai
就是列出所有TCP socket的內部資訊
我們先看一下目前在聽多少TCP的socket
那我們在ec2要怎麼做實驗呢 這時就可以打開AWS的Security Group
試著把HTTPS拿掉(當然拿掉後jyt0532.com就連不上了)
ss -ta
有趣 下面一整排都不見了 因為沒有人連得上了
等等 如果下面一整排不見代表的是所有連線都被踢掉的話 那我們再仔細看一下
左半部是我ec2的ip沒問題 那右半部難道是…..
答對了 右半的那些ip就是正在跟我的https socket通訊的人 也就是正在看我的部落格的人的ip
好玩吧
iptraf
互動式網路流量監測工具
這可能是介紹到現在 最酷的指令
你沒看錯 輸入iptraf
就是看到這個介面 接下來你就可以選你要觀測哪一個數據
然後他就開始跑起來了…
原來是wireshark啊 我以為是linux呢
非常建議大家裝起來玩一玩
iotop
就是I/O版本的top
所以前兩行換成硬碟的使用資訊 而不是記憶體的使用資訊
需要特別注意的是 預設是每個thread都列出來 如果想以Process為單位的話 就要加-P
perf_events
perf
就是可以直接測量性能的指令
用途很多 比如你想知道某個指令跑了多久 出現了多少次context-switch等等
perf stat [command]
perf top
就像是top
列出每個process的性能狀況
一樣來做個實驗 我們刻意寫個CPU很吃重的C程式
編譯一下
這個程式一執行之後 會印出process id 我們再把pid丟進perf top -p [pid]
指令裡面
來看看這個程式表現如何
我們首先先大量的print
也就是使用I/O而不是CPU 最後在大量的使用CPU
這是結算畫面
居然細節到我的函數名稱 他都可以分析 從結算畫面我們可以知道 這個程式的bottleneck就是just_loop
有趣吧 當然你要不給定pid整個系統的看也是可以的
隨便來個無限迴圈的程式
跑起來
用另一個terminal觀測 perf top
無所遁形 一目了然
dmesg
可以看到系統從開機到現在的所有system message
通常加上個-T
顯示人類看得懂的時間戳
總結
這篇文章涵蓋了這個演講提到的部分Advanced指令 為什麼只提部分呢 因為有些指令並不是linux內建的 有些指令功能跟前兩篇提到的都有重複 當然也有些指令實在太細節了 我之後需要用到的時候再man
就好了 所以關於那些指令 這篇文章就不再贅述了
基本上你有疑問的話 就是看下表 需要的話再去深入看每個指令應該怎麼用