linux性能分析命令-掃盲貼

好久沒有寫博客了,每天都過得誠惶誠恐,遂下定決心今天無論如何都要寫一篇。這篇博客主要總結和羅列一下,linux一些常用的性能分析指標,算是個掃盲吧。一般來說Linux系統出現了性能問題,都會有專門的運維人員去檢查,但是開發人員還是需要掌握一些基礎的命令,比如可以通過topiostatvmstatnetstatsar等命令來初步查看和定位問題。這些命令都比較基礎,很多網站上都能找到,我學習的時候也參照了很多資料,這裏只列出這幾個我用過的命令,後續還會增加。

Top

作用:能夠實時顯示系統中各個進程的資源佔用狀況。類似於Windows的任務管理器。
命令參數

  • d: 指定每兩次屏幕信息刷新之間的時間間隔
  • p: 通過指定監控進程ID來僅僅監控某個進程的狀態
  • q:該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那麼top將以儘可能高的優先級運行
  • S: 指定累計模式
  • s : 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險
  • i: 使top不顯示任何閒置或者僵死進程
  • c: 顯示整個命令行而不只是顯示命令名

終端輸入top,顯示如下
top
下面我們來看一下上圖中這些參數的含義。
第一行:表示的項目依次爲當前時間、系統啓動時間、當前系統登錄用戶數目、平均負載(最近1,5,15分鐘)。
第二行:顯示的是所有啓動的進程、目前運行的、掛起(Sleeping)的和無用(Zombie)的進程。
第三行:顯示的是目前CPU的使用情況,包括系統佔用的比例、用戶使用比例、閒置(Idle)比例。
第四行:顯示物理內存的使用情況,包括總的可以使用的內存、已用內存、空閒內存、緩衝區佔用的內存。
第五行:顯示交換分區使用情況,包括總的交換分區、使用的、空閒的和用於高速緩存的大小。
第六行:顯示的項目最多,內容如下:

命令 含義
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之後,還可以根據你的需要進行排序,查看對應信息,如:
shift +M:按照內存使用進行排序
shift+P:按照cpu時間排序
shift+T:按照cpu累計使用時間

推薦參考資料性能優化

vmstat

作用
虛擬內存的統計。vmstat可以實時監控cpu運行隊列和系統關鍵的性能指標,如磁盤,上下文交換,cpu使用率等。
命令參數:

  • -a:顯示活躍和非活躍內存
  • -f:顯示從系統啓動至今的fork數量
  • -m:顯示slabinfo
  • -n:只在開始時顯示一次各字段名稱
  • -s:顯示內存相關統計信息及多種系統活動數量
  • delay:刷新時間間隔。如果不指定,只顯示一條結果
  • count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數爲無窮
  • -d:顯示磁盤相關統計信息
  • -p:顯示指定磁盤分區統計信息
  • -S:使用指定單位顯示。參數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(byte)。默認單位爲K(1024 bytes)
  • -V:顯示vmstat版本信息

例子:
輸入vmstat可以看到如下界面:
vmstat

解釋下圖中各個參數的含義:
procs
r 列表示等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需要增加cpu。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。

memory
swpd 切換到內存交換區的內存數量,或者說是現在可用的交換內存(k表示)。如果swpd的值不爲0,或者比較大,比如超過了100m,只要si、so的值長期爲0,系統性能還是正常
free 當前的空閒頁面列表中內存數量(k表示) ,空閒內存
buff 作爲buffer cache的內存數量,一般對塊設備的讀寫才需要緩衝。
cache: 作爲page cache的內存數量,一般作爲文件系統的cache,如果cache較大,說明用到cache的文件較多,如果此時IO中bi比較小,說明文件系統效率比較好。

swap
si 由內存進入內存交換區數量。
so由內存交換區進入內存數量。

IO
bi 從塊設備讀入數據的總量(讀磁盤)(每秒kb)。
bo 塊設備寫入數據的總量(寫磁盤)(每秒kb)
這裏我們設置的bi+bo參考值爲1000,如果超過1000,而且wa值較大應該考慮均衡磁盤負載,可以結合iostat輸出來分析。如果bi,bo 長期不等於0,表示物理內存容量太小。

system
顯示採集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。

cpu
表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
sy 列顯示了內核進程所花費的cpu時間的百分比。這裏us + sy的參考值爲80%,如果us+sy 大於 80%說明可能存在CPU不足。
wa 列顯示了IO等待所佔用的CPU時間的百分比。這裏wa的參考值爲30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。
id 列顯示了cpu處在空閒狀態的時間百分比,如果id經常小於40,表示中央處理器的負荷很重

最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒時間內進行N(5)次採樣。如果只使用vmstat,無法反映真正的系統情況。如下:
vmstat 5 5

iostat

顧名思義,iostat主要用於監控系統設備的IO負載情況。
如下:
iostat

具體參數的含義可以參見iostat,這裏寫的比較詳細。

Netstat

輸入 man netstat可以看到解釋:

Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。

這裏找了一篇參考資料,總結的還是比較詳細的:netstat

sar

sar這個命令還是比較複雜的,實際中用的還是比較廣的。在命令行輸入sar,可以看到下圖:
sar

解釋下參數:
%user : 用戶模式下消耗的CPU時間的比例;
%nice:通過nice改變了進程調度優先級的進程,在用戶模式下消耗的CPU時間的比例;
%system:系統模式下消耗的CPU時間的比例;
**%iowait:**CPU等待磁盤I/O而導致空閒狀態消耗時間的比例。如果過高,表示存在I/O瓶頸。
*%steal:利用Xen等操作系統虛擬化技術時,等待其他虛擬CPU計算佔用的時間比例;
**%idle:**CPU沒有等待磁盤I/O等的空閒狀態消耗的時間比例。
如果 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量
如果 %idle 的值持續低於 10,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU。

Sar的命令太過複雜,我也沒有什麼實際的運維經驗,所以我這裏就列下參考資料吧:http://baike.baidu.com/view/2816483.htm (其實百度百科總結的還是很詳細的嘛,O(∩_∩)O哈哈~)

好了,linux性能分析命令-掃盲篇暫時就先這樣,等有了實際的例子再來分享下。平常沒事,大家可以輸入玩一玩,比較參數看多了就知道是神馬意思了。

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