Linux上下文切換監控

zhangferry 8年前發布 | 33K 次閱讀 Linux

我們在監測Linux的應用的時候,當CPU的利用率非常高,但是系統的性能卻上不去的時候,不妨監控一下線程/進程的切換,看看是不是context switching導致的overhead過高。

一般我使用 dstat 工具用來監控,比如 dstat -y :

---system--
intcsw
367561
274439
279363

或者 vmstat 3 :

[root@colobusmallnest]#vmstat3
procs-----------memory-------------swap-------io------system-------cpu-----
rbswpdfreebuffcachesisobiboincsussyidwast
000312619231692152161200176325166258119630

但是如何知道那些進程/線程做切換能,淘寶褚霸有篇文章: latencytop深度了解你的Linux系統的延遲 介紹了一種方法。事實上,有一個工具 pidstat ,可以用來監控上下文切換。 它是 sysstat 包其中的一個工具,sysstat包含好幾個很棒的工具,比如sar、iostat等。

執行 pidstat -w

root@abcsmallnest]# pidstat -w
Linux2.6.32-358.el6.x86_64 (abc)04/11/2016_x86_64_(2CPU)

11:25:00PMPIDcswch/s nvcswch/sCommand
11:25:00PM10.600.03init
11:25:00PM20.040.00kthreadd
11:25:00PM30.360.00migration/0
11:25:00PM40.580.00ksoftirqd/0
11:25:00PM50.010.00migration/0
11:25:00PM60.080.00watchdog/0
11:25:00PM70.390.00migration/1
11:25:00PM80.010.00migration/1
11:25:00PM90.520.00ksoftirqd/1
……

cswch/s 是主動地上下文切換, nvcswch/s 是被動執行上下文切換的次數。

如要要顯示線程的上下文切換統計,可以執行``:

[root@abc allnest]# pidstat -wt
Linux 2.6.32-358.el6.x86_64 (abc)04/11/2016_x86_64_ (2CPU)

11:27:57PM TGID TID cswch/s nvcswch/s Command
11:27:57PM1-0.560.03init
11:27:57PM -10.560.03|__init
11:27:57PM2-0.030.00kthreadd
11:27:57PM -20.030.00|__kthreadd
11:27:57PM3-0.340.00migration/0
11:27:57PM -30.340.00|__migration/0
11:27:57PM4-0.570.00ksoftirqd/0
11:27:57PM -40.570.00|__ksoftirqd/0
11:27:57PM5-0.010.00migration/0
……

更多的參數可以 man pidstat 獲得。

 

來自: http://colobu.com/2016/04/12/context-switching-monitor/

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