Linux 服務器的基本性能及測試方法


 

1. 摘要

一個基於 Linux 操作系統的服務器運行的同時,也會表征出各種各樣參數信息。通常來說運維人員、系統管理員會對這些數據會極為敏感,但是這些參數對於開發者來說也十分重要,尤其當程序非正常工作的時候,這些蛛絲馬跡往往會幫助快速定位跟蹤問題。

這里只是一些簡單的工具查看系統的相關參數,當然很多工具也是通過分析加工 /proc/sys 下的數據來工作的,而那些更加細致、專業的性能監測和調優,可能還需要更加專業的工具(perfsystemtap )和技術才能完成哦。畢竟來說,系統性能監控本身就是個大學問。

 

 

 影響Linux服務器性能的主要因素:

  • CPU
  • 內存
  • 磁盤I/O
  • 網絡I/O

2. 系統性能評估標准

 

其中:

%user:表示CPU處在用戶模式下的時間百分比。

%sys:表示CPU處在系統模式下的時間百分比。

%iowait:表示CPU等待輸入輸出完成時間的百分比。

swap in:即si,表示虛擬內存的頁導入,即從SWAP DISK交換到RAM

swap out:即so,表示虛擬內存的頁導出,即從RAM交換到SWAP DISK

3. 系統性能分析工具

3.1. 常用系統命令

Vmstatsariostatnetstatfreepstop

3.2. 常用組合方式

vmstatsariostat檢測是否是CPU瓶頸

freevmstat檢測是否是內存瓶頸

iostat檢測是否是磁盤I/O瓶頸

netstat檢測是否是網絡帶寬瓶頸

4. 系統整體性能評估

執行top命令

[root@mail ~]# top

 

 

 第一行后面的三個load average值是系統在之前 1515分鍾的平均負載,也可以看出系統負載是上升、平穩、下降的趨勢,當這個值超過 CP可執行單元的數目,則表示 CP的性能已經飽和成為瓶頸了。

 第二行統計了系統的任務狀態信息。running 很自然不必多說,包括正在 CP上運行的和將要被調度運行的;sleeping 通常是等待事件(比如 IO 操作)完成的任務,細分可以包括 interruptible uninterruptible 的類型;stopped 是一些被暫停的任務,通常發送 SIGSTOP 或者對一個前台任務操作 Ctrl-Z 可以將其暫停;zombie 僵屍任務,雖然進程終止資源會被自動回收,但是含有退出任務的 task descriptor 需要父進程訪問后才能釋放,這種進程顯示為 defunct 狀態,無論是因為父進程提前退出還是未 wait 調用,出現這種進程都應該格外注意程序是否設計有誤。

第三行 CP占用率根據類型有以下幾種情況:

(us) userCP在低 nice (高優先級)用戶態所占用的時間(nice<=0)。正常情況下只要服務器不是很閑,那么大部分的 CP時間應該都在此執行這類程序

(sy) systemCP處於內核態所占用的時間,操作系統通過系統調用(system call)從用戶態陷入內核態,以執行特定的服務;通常情況下該值會比較小,但是當服務器執行的 IO 比較密集的時候,該值會比較大

(ni) niceCP在高 nice (低優先級)用戶態以低優先級運行占用的時間(nice>0)。默認新啟動的進程 nice=0,是不會計入這里的,除非手動通過 renice 或者 setpriority() 的方式修改程序的nice

(id) idleCP在空閑狀態(執行 kernel idle handler )所占用的時間

(wa) iowait:等待 IO 完成做占用的時間

(hi) irq:系統處理硬件中斷所消耗的時間

(si) softirq:系統處理軟中斷所消耗的時間,記住軟中斷分為 softirqstasklets (其實是前者的特例)work queues,不知道這里是統計的是哪些的時間,畢竟 work queues 的執行已經不是中斷上下文了

(st) steal:在虛擬機情況下才有意義,因為虛擬機下 CP也是共享物理 CP的,所以這段時間表明虛擬機等待 hypervisor 調度 CP的時間,也意味着這段時間 hypervisor CP調度給別的 CP執行,這個時段的 CP資源被“stolen”了。

第四行和第五行是物理內存和虛擬內存(交換分區)的信息:

total = free + used + buff/cache,現在bufferscached Mem信息總和到一起了,但是bufferscached Mem 的關系很多地方都沒說清楚。其實通過對比數據,這兩個值就是 /proc/meminfo 中的 Buffers Cached 字段:Buffers 是針對 raw disk 的塊緩存,主要是以 raw block 的方式緩存文件系統的元數據(比如超級塊信息等),這個值一般比較小(20M左右);而 Cached 是針對於某些具體的文件進行讀緩存,以增加文件的訪問效率而使用的,可以說是用於文件系統中文件緩存使用。

avail Mem 是一個新的參數值,用於指示在不進行交換的情況下,可以給新開啟的程序多少內存空間,大致和 free + buff/cached 相當,而這也印證了上面的說法,free + buffers + cached Mem才是真正可用的物理內存。並且,使用交換分區不見得是壞事情,所以交換分區使用率不是什么嚴重的參數,但是頻繁的 swap in/out 就不是好事情了,這種情況需要注意,通常表示物理內存緊缺的情況。

最后是每個程序的資源占用列表,其中 CP的使用率是所有 CPcore 占用率的總和。通常執行 top 的時候,本身該程序會大量的讀取 /proc 操作,所以基本該 top 程序本身也會是名列前茅的。

top 雖然非常強大,但是通常用於控制台實時監測系統信息,不適合長時間(幾天、幾個月)監測系統的負載信息,同時對於短命的進程也會遺漏無法給出統計信息。

5. CPU性能評估

5.1. 利用vmstat命令監控系統CPU

該命令可以顯示關於系統各種資源之間相關性能的簡要信息,這里我們主要用它來看CPU一個負載情況下面是vmstat命令在某個系統的輸出結果:

 

 結果分析:

Procs

r列表示運行和等待cpu時間片的進程數,這個值如果長期大於系統CPU的個數,說明CPU不足,需要增加CPU

b列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。 

Cpu

us列顯示了用戶進程消耗的CP時間百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,就需要考慮優化程序或算法。

sy列顯示了內核進程消耗的CPU時間百分比。Sy的值較高時,說明內核消耗的CPU資源很多。

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

5.2. 利用sar命令監控系統CPU

 

結果分析

%user列顯示了用戶進程消耗的CP時間百分比。

%nice列顯示了運行正常進程所消耗的CP時間百分比。

%system列顯示了系統進程消耗的CPU時間百分比。

%iowait列顯示了IO等待所占用的CPU時間百分比

%steal列顯示了在內存相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。

%idle列顯示了CPU處在空閑狀態的時間百分比。

6. 內存性能評估

6.1. 利用vmstat命令監控內存

該命令可以顯示關於系統各種資源之間相關性能的簡要信息,這里我們主要用它來看內存情況下面是vmstat命令在某個系統的輸出結果:

 

結果分析:

Memory

swpd列表示切換到內存交換區的內存數量(以k為單位)。如果swpd的值不為0,或者比較大,只要siso的值長期為0,這種情況下一般不用擔心,不會影響系統性能。

free列表示當前空閑的物理內存數量(以k為單位)

buff列表示buffers cache的內存數量,一般對塊設備的讀寫才需要緩沖。

cache列表示page cached的內存數量,一般作為文件系統cached,頻繁訪問的文件都會被cached,如果cache值較大,說明cached的文件數較多,如果此時IObi比較小,說明文件系統效率比較好。

 

Swap

si列表示由磁盤調入內存,也就是內存進入內存交換區的數量。

so列表示由內存調入磁盤,也就是內存交換區進入內存的數量。

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

6.2. 利用free指令監控內存

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

7. 磁盤I/O性能評估

7.1. 利用iostat評估磁盤性能

 

結果分析:

KB_read/s表示每秒讀取的數據塊數。

KB_wrtn/s表示每秒寫入的數據塊數。

KB_read表示讀取的所有塊數。

KB_wrtn表示寫入的所有塊數。

 可以通過KB_read/sKB_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果KB_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程序,如果KB_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數據放入內存中進行操作。

對於這兩個選項的值沒有一個固定的大小,根據系統應用的不同,會有不同的值,但是有一個規則還是可以遵循的:長期的、超大的數據讀寫,肯定是不正常的,這種情況一定會影響系統性能。

7.2. 利用sar評估磁盤性能

結果分析:

await表示平均每次設備I/O操作的等待時間(以毫秒為單位)。

svctm表示平均每次設備I/O操作的服務時間(以毫秒為單位)。

%util表示一秒中有百分之幾的時間用於I/O操作。

對以磁盤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系統已經滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,可以通過優化程序或者通過更換更高、更快的磁盤來解決此問題。

8. 網絡I/O性能評估

網絡性能對於服務器的重要性不言而喻,工具 iptraf 可以直觀的現實網卡的收發速度信息,比較的簡潔方便通過 sar -n DEV 1 也可以得到類似的吞吐量信息,而網卡都標配了最大速率信息,比如百兆網卡千兆網卡,很容易查看設備的利用率。

通常,網卡的傳輸速率並不是網絡開發中最為關切的,而是針對特定的 UDPTCP 連接的丟包率、重傳率,以及網絡延時等信息。

8.1. 利用netstat評估網絡性能

8.1.1. netstat -s

 

 

 顯示自從系統啟動以來,各個協議的總體數據信息。雖然參數信息比較豐富有用,但是累計值,除非兩次運行做差才能得出當前系統的網絡狀態信息,亦或者使用 眼睛直觀其數值變化趨勢。所以netstat通常用來檢測端口和連接信息的

8.1.2. netstat -antp

列出所有TCP的連接

8.1.3. netstat -nltp

列出本地所有TCP偵聽套接字,不要加-a參數

8.2. 利用TCP評估網絡性能

 

結果分析:

active/s:本地發起的 TCP 連接,比如通過 connect()TCP 的狀態從CLOSED -> SYN-SENT

passive/s:由遠程發起的 TCP 連接,比如通過 accept()TCP 的狀態從LISTEN -> SYN-RCVD

retrans/s(tcpRetransSegs):每秒鍾 TCP 重傳數目,通常在網絡質量差,或者服務器過載后丟包的情況下,根據 TCP 的確認重傳機制會發生重傳操作

isegerr/s(tcpInErrs):每秒鍾接收到出錯的數據包(比如 checksum 失敗)

8.3. 利用UDP評估網絡性能

結果分析:

noport/s(udpNoPorts):每秒鍾接收到的但是卻沒有應用程序在指定目的端口的數據報個數

idgmerr/s(udpInErrors):除了上面原因之外的本機接收到但卻無法派發的數據報個數

當然,這些數據一定程度上可以說明網絡可靠性,但也只有同具體的業務需求場景結合起來才具有意義

8.4. 利用iperf評估網絡性能

iperf 是一個 TCP/IP UDP/IP 的性能測量工具,能夠提供網絡吞吐率信息,以及震動、丟包率、最大段和最大傳輸單元大小等統計信息;從而能夠幫助我們測試網絡性能,定位網絡瓶頸。

8.4.1. 常用公共參數

-i 2    #表示每2秒顯示一次報告

-w 80k    #對於TCP方式,此設置為TCP窗口大小。對於UDP方式,此設置為接受UDP數據包的緩沖區大小,限制可以接受數據包的最大值

-B 192.168.122.1    

#綁定到主機的多個地址中的一個。對於客戶端來說,這個參數設置了出棧接口。對於服務器端來說,這個參數設置入棧接口。這個參數只用於具有多網絡接口的主機。

#IperfUDP模式下,此參數用於綁 定和加入一個多播組。使用范圍在224.0.0.0239.255.255.255的多播地址

8.4.2. 常用客戶端參數

-b 100m    #用於udp測試時,設置測試發送的帶寬,單位:bit/秒,不設置時默認為:1Mbit/

-c     #指定服務端ip地址

-d     #同時測試上行和下行

-t 10    #設置傳輸時間,為10秒    

-P 5    #指定發起5個線程

8.4.3. TCP模式下網絡測試

服務端:

iperf3 -p 8000  -s -i 1

參數說明: -p : 端口號 -s : 標示服務端 -: 標示udp協議 -i : 檢測的時間間隔(單位:秒)絡測試

客戶端:

iperf3 -c 113.54.158.252 -p 8000 -i 1 -b 10M

客戶端

iperf -c 192.168.122.1 -t 60 #tcp模式下,客戶端到服務器192.168.1.1上傳帶寬測試,測試時間為60秒。

iperf -c 192.168.122.1 -P 30 -t 60 #客戶端同時向服務器端發起30個連接線程。

iperf -c 192.168.122.1 -d -t 60 -i 2 #進行上下行帶寬測試。

8.4.4. UDP模式下網絡測試

服務器端:

iperf3 -p 8000  -s -i 1

參數說明: -p : 端口號 -s : 標示服務端 -: 標示udp協議 -i : 檢測的時間間隔(單位:秒)

客戶端:

iperf3 - -c 113.54.158.252 -p 8000  -i 1 -b 10M

參數說明: -c : 服務端的ip地址 -p : 端口號 -: 標示udp協議 -b : 每一次發送的數據大小 -t : 總的發送時間(單位:秒) -i : 發送數據的時間間隔(單位:秒) -P : 表示線程個數,不指定則默認單線程


免責聲明!

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



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