Linux 系統性能優化思路和優化方法


一、影響 Linux 性能的各種因素

1、系統硬件資源

(1)CPU

如何判斷多核 CPU 與超線程

消耗 CPU 的業務:動態 web 服務、mail 服務

(2)內存

  • 物理內存與 swap 的取舍
  • 選擇 64 位 Linux 操作系統

消耗內存的業務:內存數據庫(redis/hbase/mongodb)

(3)磁盤 IO

  • RAID 技術(RAID0/1/5/01/10)
  • SSD 磁盤

消耗磁盤的業務:數據庫服務器

(4)網絡帶寬

  • 網卡/交換機的選擇
  • 操作系統雙網卡綁定

消耗帶寬的業務:hadoop 平台、視頻業務平台

2、操作系統相關資源

(1)系統安裝優化

磁盤分區、RAID 設置、swap 設置

(2)內核參數優化

ulimit -n(最大打開文件數)

ulimit -u(最大用戶數)

(3)文件系統優化

  • ext2:Linux 下標准文件系統,無日志記錄(inode)功能。
  • ext3:在ext2 基礎上增加了日志記錄功能(inode),僅支持 32000 個子目錄。
  • ex4:ext3 的后續版本,Linux2.6.28 內核開始支持。無限子目錄支持,快速 fsck。
  • xfs:高性能文件系統,Linux3.10 內核開始默認支持。

建議:

讀操作頻繁,同時小文件眾多的應用:首選 ext4 文件系統,接下來依次是 xfs、ext3

寫操作頻繁的應用,首選是 xfs,接下來依次是 ext4 和 ext3

對性能要求丌高、數據安全要求丌高的業務,ext3 是比較好的選擇。

3、程序問題

此類問題需要開發人員查看代碼,介入處理。但作為運維人員需要給出程序問題的有力證據。

 

二、Linux 性能優化工具

1、CPU 性能評估工具

(1)vmstat(系統默認自帶)

利用 vmstat 命令可以對操作系統的內存信息、進程狀態、CPU活勱等進行監視。

常用方式:vmstat 2 3

表示每 3 秒更新一次輸出信息,統計 5 次后停止輸出。

下面是 vmstat 命令在某個系統的輸出結果:

對上面每項的輸出解釋如下:

  • procs
  • r 列表示運行和等待 cpu 時間片的進程數, 這個值如果長期大於系統CPU 的個數,說明 CPU 不足,需要增加 CPU。
  • b 列表示在等待資源的進程數,比如正在等待 I/O、或者內存交換等。
  • memory
  • swpd 列表示切換到內存交換區的內存數量(以 k為單位) 。如果 swpd 的值不為0,或者比較大,只要 si、so 的值長期為 0,這種情況下一般不用擔心,不會影響系統性能。
  • free列表示當前空閑的物理內存數量(以 k為單位)
  • buff 列表示 buffers cache的內存數量,一般對塊設備的讀寫才需要緩沖。
  • cache列表示 page cached 的內存數量,一般作為文件系統 cached,頻繁訪問的文件都會被 cached,如果 cache 值較大,說明 cached 的文件數較多,如果此時 IO 中 bi比較小,說明文件系統效率比較好。
  • swap
  • si列表示由磁盤調入內存,也就是內存進入內存交換區的數量。
  • so 列表示由內存調入磁盤,也就是內存交換區進入內存的數量。

一般情況下, si、 so 的值都為 0, 如果 si、 so 的值長期不為 0, 則表示系統內存不足。需要增加系統內存。

  • IO 項顯示磁盤讀寫狀況
  • Bi列表示從塊設備讀入數據的總量(即讀磁盤) (每秒 kb) 。
  • Bo 列表示寫入到塊設備的數據總量(即寫磁盤) (每秒 kb)。

這里我們設置的 bi+bo 參考值為 1000,如果超過 1000,而且 wa值較大,則表示系統磁盤 IO 有問題,應該考慮提高磁盤的讀寫性能。

  • system 顯示采集間隔內發生的中斷數
  • in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
  • cs 列表示每秒產生的上下文切換次數。

上面這 2 個值越大,會看到由內核消耗的 CPU 時間會越多。

  • CPU 項顯示了 CPU 的使用狀態,此列是我們關注的重點。
  • us 列顯示了用戶進程消耗的 CPU 時間百分比。us 的值比較高時,說明用戶進程消耗的 cpu 時間多,但是如果長期大於 50%,就需要考慮優化程序或算法。
  • sy列顯示了內核進程消耗的 CPU 時間百分比。Sy的值較高時,說明內核消耗的CPU 資源很多。

根據經驗, us+sy的參考值為 80%, 如果 us+sy大於 80%說明可能存在 CPU 資源不足。

  • id 列顯示了 CPU 處在空閑狀態的時間百分比。
  • wa 列顯示了 IO 等待所占用的 CPU 時間百分比。wa 值越高,說明 IO 等待越嚴重,根據經驗,wa 的參考值為 20%,如果 wa 超過 20%,說明 IO 等待嚴重,引起 IO 等待的原因可能是磁盤大量隨機讀寫造成的, 也可能是磁盤或者磁盤控制器的帶寬瓶頸造成的(主要是塊操作) 。

綜上所述, 在對 CPU 的評估中, 需要重點注意的是procs 項 r 列的值和 CPU 項中 us、sy和 id 列的值。

(2)iostat(需要安裝 sysstat 工具包)

iostat 是 I/O statistics(輸入/輸出統計)的縮寫,主要的功能是對系統的磁盤 I/O 操作進行監視。

常用方式:iostat -c 3 5

其中,-c 表示顯示CPU 的使用情況,-d:顯示磁盤的使用情況。

(3)uptime 命令

uptime 是監控系統性能最常用的一個命令,主要用來統計系統當前的運行狀況,輸出的信息依次為:系統現在的時間、 系統從上次開機到現在運行了多長時間、 系統目前有多少登陸用戶、系統在一分鍾內、五分鍾內、十五分鍾內的平均負載。

2、內存性能評估

(1)free 命令

free 命令是監控 linux 內存使用狀況最常用的指令

常見用法:free –m

看下面的一個輸出:

“free –m”表示以 M為單位查看內存使用情況,在這個輸出中,我們重點關注的應該是 free 列與 cached 列的輸出值,由輸出可知,此系統共 8G 內存,系統空閑內存還有925M,其中,Buffer Cache 占用了 243M,Page Cache 占用了 6299M,由此可知系統緩存了很多的文件和目錄,而對於應用程序來說,可以使用的內存還有 7468M,當然這個 7468M 包含了 Buffer Cache 和 Page Cache 的值。在 swap 項可以看出,交換分區還未使用。所以從應用的角度來說,此系統內存資源還非常充足。

一般有這樣一個經驗公式:應用程序可用內存/系統物理內存>70%時,表示系統內存資源非常充足,不影響系統性能,應用程序可用內存/系統物理內存<20%時,表示系統內存資源緊缺,需要增加系統內存,20%<應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能滿足應用需求,暫時不影響系統性能。

(2)sar/pidstat

此兩個命令主要用於監控全部或指定進程占用系統資源的情況,如 CPU,內存、設備IO。

三個公用參數:-u(獲取 CPU 狀態) 、-r(獲取內存狀態) 、-d(獲取磁盤)

常用組合:

sar -u 3 獲取 cpu 3 秒內的狀態

pidstat -r –p 1 3 獲取內存 3 秒內的狀態

看看以上兩個命令的差別?

請看下面的一個輸出:

其中:

Kbmemfree 表示空閑物理內存大小,kbmemused 表示已使用的物理內存空間大小,%memused 表示已使用內存占總內存大小的百分比,kbbuffers 和 kbcached 分別表示Buffer Cache 和 Page Cache 的大小,kbcommit 和%commit 分別表示應用程序當前使用的內存大小和使用百分比。

可以看出 sar 的輸出其實與 free的輸出完全對應,不過 sar 更加人性化,不但給出了內存使用量,還給出了內存使用的百分比以及統計的平均值。從%commit 項可知,此系統目前內存資源充足。

3、磁盤性能評估

(1)iostat –d 組合

iostat –d 2 3

通過“iostat –d”命令組合也可以查看系統磁盤的使用狀況,請看如下輸出:

對上面每項的輸出解釋如下:

  • Blk_read/s 表示每秒讀取的數據塊數。
  • Blk_wrtn/s 表示每秒寫入的數據塊數。
  • Blk_read 表示讀取的所有塊數。
  • Blk_wrtn 表示寫入的所有塊數。

(2)pidstat -d -p 31887 3

(3)sar -d 2 3

通過“sar –d”組合,可以對系統的磁盤 IO 做一個基本的統計,請看下面的一個輸出:

對上面每項的輸出解釋如下:

  • DEV 表示磁盤設備名稱。
  • tps 表示每秒到物理磁盤的傳送數,也就是每秒的 I/O 流量。一個傳送就是一個 I/O 請求,多個邏輯請求可以被合並為一個物理 I/O 請求。
  • rd_sec/s 表示每秒從設備讀取的扇區數(1 扇區=512 字節)。
  • wr_sec/s 表示每秒寫入設備的扇區數目。
  • avgrq-sz 表示平均每次設備 I/O 操作的數據大小(以扇區為單位) 。
  • avgqu-sz 表示平均 I/O 隊列長度。
  • await 表示平均每次設備 I/O 操作的等待時間(以毫秒為單位) 。
  • svctm表示平均每次設備 I/O 操作的服務時間(以毫秒為單位) 。
  • %util表示一秒中有百分之幾的時間用於 I/O 操作。

Linux 中 I/O 請求系統與現實生活中超市購物排隊系統有很多類似的地方,通過對超市購物排隊系統的理解,可以很快掌握 linux 中 I/O 運行機制。比如:

  • avgrq-sz 類似於超市排隊中每人所買東西的多少。
  • avgqu-sz 類似於超市排隊中單位時間內平均排隊的人數。
  • await 類似於超市排隊中每人的等待時間。
  • svctm類似於超市排隊中收銀員的收款速度。
  • %util類似於超市收銀台前有人排隊的時間比例。

對於磁盤 IO 性能,一般有如下評判標准:

正常情況下 svctm 應該是小於 await 值的,而 svctm 的大小和磁盤性能有關,CPU、內存的負荷也會對 svctm值造成影響,過多的請求也會間接的導致 svctm值的增加。

await 值的大小一般取決於 svctm 的值和 I/O 隊列長度以及 I/O 請求模式,如果 svctm的值與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,如果 await 的值遠高於 svctm的值,則表示 I/O 隊列等待太長,系統上運行的應用程序將變慢,此時可以通過更換更快的硬盤來解決問題。

%util 項的值也是衡量磁盤 I/O 的一個重要指標,如果%util 接近 100%,表示磁盤產生的 I/O 請求太多,I/O 系統已經滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,可以通過優化程序或者通過更換更高、更快的磁盤來解決此問題。

4、網絡性能評估

(1)ping 命令

請看下面的一個輸出:

在這個輸出中,time值顯示了兩台主機之間的網絡延時情況,如果此值很大,則表示網絡的延時很大,單位為毫秒。在這個輸出的最后,是對上面輸出信息的一個總結,packet loss 表示網絡的丟包率,此值越小,表示網絡的質量越高。

(2)netstat 命令

netstat –i (查看路由情況)

netstat –r(查看網絡接口狀態)

(3)mtr/traceroute 命令

跟蹤網絡路由狀態,推薦使用 mtr,動態跟蹤網絡路由,用於排除網絡問題非常方便。

 

三、系統性能分析標准

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM