Linux 性能異常定位之進程級別

gg_yun 8年前發布 | 21K 次閱讀 進程 Linux 運維

前言

本文和大家分享:linux系統下各維度的異常,怎樣定位到進程級別。說簡單點,就是:linux(性能)各維度指標出問題了,我們需要確定哪些進程影響的。

本文主要涉及的linux的常見的性能維度:cpu,內存,io,網絡

涉及工具

top:綜合,偏cpu,內存

dstat:綜合、磁盤

iostat:磁盤io,全局

iotop:磁盤io,精確到進程,(類似工具還有pidstat)

iftop:網絡、實時刷新(類似工具還有nload,ifstat)

nethogs:進程級別的流量

ss:網絡、快、消耗資源低(替代netstat)

pidstat:綜合的

free:額,內存。。。

CPU

cpu主要關注性能指標:

(1)cpu使用率:用戶,系統等

(2)cpu累計使用時長

(3)中斷,上下文切換等(使用不多)

就cpu性能指標的觀察而言,其實有很多工具,這里主要介紹top和dstat

1、top

top各行結果我就不詳細介紹了,是用起來也比較簡單。對于排查cpu是用率過高,比較關鍵的指令是P和T。

輸入了P(冒號P)之后:按照cpu排序

輸入T(冒號T):根據時間、累計時間排序,可查看哪些進程消耗歷史消耗多

這樣我們就能找到哪個進程占用cpu過高了。

下例:就發現ntpd腳本占用的cpu時間是最多的,當前的ntpd占用cpu使用率也較大(其實只有1.3%)

另外:還可以輸入以下便捷指令

2、多核

m:是否顯示內存信息

M:根據內存排序

H:shift+h,打開線程模式

x:列的高亮(先要按b)

shift+<或者shift+>改變排序的行

3、dstat命令

dstat也是一個比較綜合的工具

這里用來找到cpu暫用率最高的參數如下

dstat -lcm --top-cpu

下圖可以看到,ntpd(時間服務)和zabbix的agent消耗cpu多點(其實也不多,才0.x%)

4、pidstat

直接輸入pidstat(或者pidstat -l,會把命令的絕對路徑輸出)就可以看到進程使用cpu相關數據

內存

一般我們對內存關注幾個指標:

(1)是否使用了大量的交換空間:如果使用了大量的交換空間,說明有問題了(內存不夠?還是說有進程異常?)

(2)每個進程消耗了多少內存空間:

對于內存的查看,最簡單就是free,還有dstat和top

1、free

通過free -m 我們看到,swap沒有使用,內存充足

2、dstat

查看哪個進程消耗了最多的內存

輸入dstat lcmd -top-mem

看到,就puppet消耗了最多的內存59m(正常)

3、top

輸入top之后,輸入b,再輸入x,再輸入shift+’>’或者shif+’<‘調整排序的列到mem,就看到到內存消耗的排序了

磁盤

一般我們對磁盤關注幾個指標:

(1)讀寫的量/秒:dstat和iostat(全局),iotop或者pidstat(進程級別)

(2)每次讀寫磁盤的延遲時間:iostat(全局)

dstat,iostat用于查看全局的io情況,要精確到進程用iotop或者pidstat

dstat:可以看到磁盤每秒的讀、寫取量(單位還整理過,所以一般我看磁盤的讀寫量都會用這個工具)

iostat就可以看到:磁盤的磁盤每秒的讀、寫取量并且還可以看到io的延遲效果(一般我看io的延遲會用這個工具)

1、dstat

dstat可以看到每秒讀寫多少B、K、M的數據

dstat其他參數和常用使用還有:

dstat -g -l -m -s --top-mem

dstat -c -y -l --proc-count --top-cpu

2、iostat

也可以看到類似的效果,而且更加豐富

svctm < await (同時等待的請求的等待時間被重復計算),

如果 svctm 比較接近 await,說明I/O 幾乎沒有等待時間;

如果 await 遠大于 svctm,說明 I/O 隊列太長

await:    平均每次設備I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)

svctm:    平均每次設備I/O操作的服務時間 (毫秒):會將await也計算在內

%util:    一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因為use的單位為毫秒)

3、iotop

通過iotop直接看得到io占用最高的進程,直接輸入iotop命令,效果如下

4、pidstat

通過pidstat -d也可以看到讀寫磁盤數據多的進程,pidstat -d效果如下:

網絡

一般網絡主要關注性能指標:

(1)出入的流量

(2)連接狀態:各個狀態如established,timewait等

(3)本地監聽,消耗的端口數量等

接下來介紹三個工具

1、ss

ss命令用于功能和netstat差不多,用于查看網絡連接狀態。

ss:消耗資源低;和netstat相比,比較快的原因在于:“ss快的秘訣在于,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用于分析統計的模塊,可以獲得Linux 內核中第一手的信息,這就確保了ss的快捷高效。當然,如果你的系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍慢”(zz)

以下的實例說明當前已經建立了連接33個,timewaite有866個(可以考慮優化了)

以下的示例說明本地打開了哪些端口

2、iftop

通過iftop可以看到本機和哪些ip域名之間的流量很大:

直接輸入iftop既可以看到:

iftop命令相關參數介紹如下:

- i 設定監測的網卡,如: # iftop - i eth1

-B 以 bytes 為單位顯示流量 ( 默認是 bits) ,如: # iftop -B

-n 使 host 信息默認直接都顯示 IP ,如: # iftop -n

-N 使端口信息默認直接都顯示端口號,如 : # iftop -N

-F 顯示特定網段的進出流量,如 # iftop -F 10.10.1.0/24 或 # iftop -F 10.10.1.0/255.255.255.0

-h ( display this message ),幫助,顯示參數信息

3、nethogs

nethogs能直接就看到進程級別的流量

直接輸入nethogs em2(網卡)就可以看到本地的哪些端口和對端的哪些端口之間的流量,從而就知道哪些進程消耗了很多網絡流量了

小結

以上工具,從cpu、內存、磁盤,網絡維度,能查到各個進程消耗相關性能(資源)的具體情況,對系統性能出異常時,定位至進程級別是十分有幫助了。

 

來自:http://mp.weixin.qq.com/s?__biz=MzIwMzEwOTUwMQ==&mid=2247483664&idx=1&sn=5b0591c5876f8923b87871dc56982894&chksm=96d52402a1a2ad141345390ecc79174da8b293e05c57422f55054a03f946310125f0e1a817fb&scene=4

 

 本文由用戶 gg_yun 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!