系統工程師工具箱

遇到問題時的處理思路

  1. 評估故障重要性,緊急程度,適當的報告,如果需要,可尋求幫助;
  2. 及時處理故障,“糙、快、猛”,見效快,消除影響-治標;
  3. 故障善後要治本,聰明靠譜的人不會讓故障發生第二次;
  4. 合理安排工作哦,保證處理問題的節奏感-好的反饋機制有利於解決問題;
  5. 故障是日常工作積累的集中反饋;
  6. 行勝於言,自己得到的數據分析比聽到的重要;

如何判斷系統的瓶頸或故障點

  1. 日常工作:監控是否到位,日誌是否準確全面(提高故障定位率和定位速度);
  2. 必要的技術手段:cpu, disk io(iops or throughput), network(初步診斷);
  3. 熟悉自己負責的系統,逐步搞懂原理;
  4. “源碼面前,了無祕密”,對非自己開發的程序要仔細評測後使用;

工具箱

  • 首先解釋下什麼是load

     在Linux系統中,uptime,top等命令都會有系統平均負載load average的輸出,這裏解釋下究竟什麼是系統平均負載。

     系統平均負載被定義爲在特定時間間隔內運行隊列中的平均進程數,如果一個進程滿足以下條件,則其位於運行隊列中:

  1. 它沒有在等待IO操作的結果;
  2. 它沒有主動進入等待狀態(如沒有調用wait);
  3. 沒有被停止;

     阮一峯在其博客《理解Linux系統負荷》一文對load做了非常清晰形象的解釋,推薦一看。

  •     vmstat

   vmstat是一個查看虛擬內存使用狀況的工具。在查看過Linux的負載信息後,我們應該優先使用vmstat。

     在這裏介紹一下虛擬內存的原理。在系統中運行的每個進程都需要使用到內存,但不是每個進程都需要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所佔用但未使用的部分或所有物理內存,將這部分資料存儲在磁盤上直到進程下一次調用,並將釋放出的內存提供給有需要的進程使用。

  在Linux內存管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的內存調度。調頁算法是將內存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁盤上。

  分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內存的過程被稱作Page-In。當內核需要一個分頁時,但發現此分頁不在物理內存中(因爲已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。

  當系統內核發現可運行內存變少時,就會通過Page-Out來釋放一部分物理內存。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。

      我們看一下vmstat的輸出結果:

     爲了分析系統性能瓶頸,我們首先重點關注下r, b, si, so, bi, bo, wa字段。

     r表示運行隊列中的進程數量;b表示等待IO的進程數量。如果b長時間不爲0,表示IO已成爲系統瓶頸;

     si, so分別表示每秒從交換區寫入或寫出內存的大小,較大表示有可能出現顛簸,系統內存不夠,經常需要換入換出操作;

     bi, bo表示每秒讀取、寫入的塊數,用來衡量磁盤讀寫的情況;

     wa表示CPU等待IO的時間,如果大於15,也說明存在IO問題。另外,注意在多核的場景下,使用top命令看到的wa是均值,可以top->1,查看時候有某個CPU的wa過高,這個CPU很可能已成爲瓶頸。

  •      iostat

     介紹下iostat裏邊的幾個數據:

     Blk_read/s和Blk_wrtn/s表示每秒從設備讀取、寫入的數據量,以Block爲單位。Block的大小在kernel 2.4後均爲512字節;

     tps表示該設備每秒的傳輸次數。一次傳輸意味着一次IO請求,多個邏輯請求可能會被合併成一次IO請求,一次傳輸的請求大小是未知的。

  await表示每一個IO請求處理的平均時間(單位爲毫秒)。可以理解爲IO的響應時間,一般系統IO響應時間應低於5ms,如果大於10ms就比較大了。

     %util,表示統計時間內所有處理IO的時間,除以總的統計時間。暗示了設備的繁忙程度。

  • iotop

     接下來可以使用iotop,查看究竟是哪個進程在大量的讀寫磁盤。如下圖所示:

  •      iftop

     iftop是類似於top的實時流量檢測工具。之前我都是用nload來看整個機器的流量情況,今天使用了下iftop,可以看到每個網絡連接的流量情況,對於一個服務同時服務於多個連接的情況(這個太常見了),非常給力。

     還有lsof,用來查看當前系統所有打開文件的狀況,可以分析進程究竟被哪個文件鎖住了;tcpdump(如果有圖形界面,也可以用wireshark)用來抓包分析(tcp包或直接觀察應用層協議);iptables,用來添加管理特定的連接策略等。

     如上,介紹了常用的分析工具,文章最後,再給出一些常見的優化思路。

常見優化

  1. iostat發現磁盤IO瓶頸,考慮應用場景,碎片化IO是否可以緩存批量讀寫,需要頻繁讀入的文件可以考慮放入/dev/shm;
  2. 日誌文件忘記分割,導致程序越來越慢;
  3. Swap過多,vmstat的si so經常不爲0,表示內存不足;
  4. 網絡調優,netstat -nat發現諸如TIME_WAIT過多,連接數不夠用,連接數一直上不來,打開文件數過多等,通過修改/etc/sysctl.conf優化、該apache/nginx配置優化,修改TCP buffer,backlog等;
  5. 使用SSD,甚或優化文件系統;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章