linux內核參數調優,linux性能優化常用命令

 2023-10-07 阅读 27 评论 0

摘要:作為一名linux系統管理員,最主要的工作是優化系統配置,使應用在系統上以最優的狀態運行,但是由于硬件問題、軟件問題、網絡環境等的復雜性 和多變性,導致對系統的優化變得異常復雜,如何定位性能問題出在哪個方面,是性能優化的一大難

作為一名linux系統管理員,最主要的工作是優化系統配置,使應用在系統上以最優的狀態運行,但是由于硬件問題、軟件問題、網絡環境等的復雜性 和多變性,導致對系統的優化變得異常復雜,如何定位性能問題出在哪個方面,是性能優化的一大難題, 本章從系統入手,重點講述由于系統軟、硬件配置不當可能造成的性能問題,并且給出了檢測系統故障和優化性能的一般方法和流程。
1 cpu性能評估
?Cpu是影響Linux性能的主要因素之一,下面先介紹幾個查看CPU性能的命令。
1.1 vmstat命令
該命令可以顯示關于系統各種資源之間相關性能的簡要信息,這里我們主要用它來看CPU的一個負載情況。
下面是vmstat命令在某個系統的輸出結果:
[root@node1 ~]# vmstat 2 3
procs -----------memory----------? ---swap--? -----io---- --system--? -----cpu------
?r? b?? swpd?? free?? buff? cache?? si?? so??? bi??? bo??? in??? cs??? us sy? id? wa st
?0? 0??? 0??? 162240?? 8304? 67032?? 0??? 0??? 13??? 21?? 1007?? 23???? 0? 1? 98? 0? 0
?0? 0??? 0??? 162240?? 8304? 67032?? 0??? 0???? 1???? 0?? 1010?? 20???? 0? 1? 100 0? 0
?0? 0??? 0??? 162240?? 8304? 67032?? 0??? 0???? 1???? 1?? 1009?? 18???? 0? 1? 99? 0? 0
對上面每項的輸出解釋如下:
? 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列的值。
1.2? sar命令
檢查CPU性能的第二個工具是sar,sar功能很強大,可以對系統的每個方面進行單獨的統計,但是使用sar命令會增加系統開銷,不過這些開銷是可以評估的,對系統的統計結果不會有很大影響。
下面是sar命令對某個系統的CPU統計輸出:
[root@webserver ~]# sar -u 3 5
Linux 2.6.9-42.ELsmp (webserver)??????? 11/28/2008????? _i686_? (8 CPU)

11:41:24 AM???? CPU???? %user???? %nice?? %system?? %iowait??? %steal???? %idle
11:41:27 AM???? all????? 0.88????? 0.00????? 0.29????? 0.00????? 0.00???? 98.83
11:41:30 AM???? all????? 0.13????? 0.00????? 0.17????? 0.21????? 0.00???? 99.50
11:41:33 AM???? all????? 0.04????? 0.00????? 0.04????? 0.00????? 0.00???? 99.92
11:41:36 AM???? all????? 0.29????? 0.00????? 0.13????? 0.00????? 0.00???? 99.58
11:41:39 AM???? all????? 0.38????? 0.00????? 0.17????? 0.04????? 0.00???? 99.41
Average:??????? all????? 0.34????? 0.00????? 0.16????? 0.05????? 0.00???? 99.45
?對上面每項的輸出解釋如下:
? %user列顯示了用戶進程消耗的CPU 時間百分比。
? %nice列顯示了運行正常進程所消耗的CPU 時間百分比。
? %system列顯示了系統進程消耗的CPU時間百分比。
? %iowait列顯示了IO等待所占用的CPU時間百分比
? %steal列顯示了在內存相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。
? %idle列顯示了CPU處在空閑狀態的時間百分比。
?這個輸出是對系統整體CPU使用狀況的統計,每項的輸出都非常直觀,并且最后一行Average是個匯總行,是上面統計信息的一個平均值。
?需要注意的一點是:第一行的統計信息中包含了sar本身的統計消耗,所以%user列的值會偏高一點,不過,這不會對統計結果產生多大影響。
?在一個多CPU的系統中,如果程序使用了單線程,會出現這么一個現象,CPU的整體使用率不高,但是系統應用卻響應緩慢,這可能是由于程序使用單線程的原因,單線程只使用一個CPU,導致這個CPU占用率為100%,無法處理其它請求,而其它的CPU卻閑置,這就導致 了整體CPU使用率不高,而應用緩慢 現象的發生 。
?針對這個問題,可以對系統的每個CPU分開查詢,統計每個CPU的使用情況:
[root@webserver ~]# sar -P 0 3 5?
Linux 2.6.9-42.ELsmp (webserver)??????? 11/29/2008????? _i686_? (8 CPU)

linux內核參數調優、06:29:33 PM???? CPU???? %user???? %nice?? %system?? %iowait??? %steal???? %idle
06:29:36 PM?????? 0????? 3.00????? 0.00????? 0.33????? 0.00????? 0.00???? 96.67
06:29:39 PM?????? 0????? 0.67????? 0.00????? 0.33????? 0.00????? 0.00???? 99.00
06:29:42 PM?????? 0????? 0.00????? 0.00????? 0.33????? 0.00????? 0.00???? 99.67
06:29:45 PM?????? 0????? 0.67????? 0.00????? 0.33????? 0.00????? 0.00???? 99.00
06:29:48 PM?????? 0????? 1.00????? 0.00????? 0.33????? 0.33????? 0.00???? 98.34
Average:????????? 0????? 1.07????? 0.00????? 0.33????? 0.07????? 0.00???? 98.53
?這個輸出是對系統的第一顆CPU的信息統計,需要注意的是,sar中對CPU的計數是從0開始的,因此,“sar -P 0 3 5”表示對系統的第一顆CPU進行信息統計,“sar -P 4 3 5”則表示對系統的第五顆CPU進行統計。依次類推。可以看出,上面的系統有八顆CPU。
1.3 iostat命令
?iostat指令主要用于統計磁盤IO狀態,但是也能查看CPU的使用信息,它的局限性是只能顯示系統所有CPU的平均信息,看下面的一個輸出:
[root@webserver ~]# iostat? -c
Linux 2.6.9-42.ELsmp (webserver)??????? 11/29/2008????? _i686_? (8 CPU)

avg-cpu:? %user?? %nice?? %system? %iowait? %steal?? %idle
?????????? 2.52??? 0.00??? 0.30???? 0.24???? 0.00??? 96.96
?在這里,我們使用了“-c”參數,只顯示系統CPU的統計信息,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。
1.4 uptime命令
?uptime是監控系統性能最常用的一個命令,主要用來統計系統當前的運行狀況,輸出的信息依次為:系統現在的時間、系統從上次開機到現在運行了多長時間、系統目前有多少登陸用戶、系統在一分鐘內、五分鐘內、十五分鐘內的平均負載。看下面的一個輸出:
[root@webserver ~]# uptime
?18:52:11 up 27 days, 19:44,? 2 users,? load average: 0.12, 0.08, 0.08
這里需要注意的是load average這個輸出值,這三個值的大小一般不能大于系統CPU的個數,例如,本輸出中系統有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負載很高,可能會影響系統性能,但是偶爾大于8時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小于CPU的個數,則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。
1.5 本節小結
上面介紹了檢查CPU使用狀況的四個命令,通過這些命令需要了解的是:系統CPU是否出現性能瓶頸,也就是說,以上這些命令只能查看CPU是否繁忙,負載是否過大,但是無法知道CPU為何負載過大,因而,判斷系統CPU出現問題后,要結合top、ps等命令進一步檢查是由那些進程導致CPU負載過大的。引起CPU資源緊缺的原因可能是應用程序不合理造成的,也可能是硬件資源匱乏引起的,所以,要具體問題具體分析,或者優化應用程序,或者增加系統CPU資源。
2 內存性能評估
內存的管理和優化是系統性能優化的一個重要部分,內存資源的充足與否直接影響應用系統的使用性能,在進行內存優化之前,一定要熟悉linux的內存管理機制,這一點我們在前面的章節已經有深入講述,本節的重點是如何通過系統命令監控linux系統的內存使用狀況。
2.1 free 命令
free是監控linux內存使用狀況最常用的指令,看下面的一個輸出:
[root@webserver ~]# free -m
???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:????????? 8111?????? 7185??????? 925????????? 0??????? 243?????? 6299
-/+ buffers/cache:??????? 643?????? 7468
Swap:???????? 8189????????? 0?????? 8189
? “free –m”表示以M為單位查看內存使用情況,在這個輸出中,我們重點關注的應該是free列與cached列的輸出值,由輸出可知,此系統共8G內存,系統空閑內存還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統緩存了很多的文件和目錄,而對于應用程序來說,可以使用的內存還有7468M,當然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區還未使用。所以從應用的角度來說,此系統內存資源還非常充足。?
? 一般有這樣一個經驗公式:應用程序可用內存/系統物理內存>70%時,表示系統內存資源非常充足,不影響系統性能,應用程序可用內存/系統物理內存<20%時,表示系統內存資源緊缺,需要增加系統內存,20%<應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能滿足應用需求,暫時不影響系統性能。
? free命令還可以適時的監控內存的使用狀況,使用“-s”參數可以在指定的時間段內不間斷的監控內存的使用情況:
[root@webserver ~]# free -b -s 5?
???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:??? 8505901056 7528706048? 977195008????????? 0? 260112384 6601158656
-/+ buffers/cache:? 667435008 7838466048
Swap:?? 8587149312???? 163840 8586985472

???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:??? 8505901056 7526936576? 978964480????????? 0? 260128768 6601142272
-/+ buffers/cache:? 665665536 7840235520
Swap:?? 8587149312???? 163840 8586985472

centos性能優化????????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:??? 8505901056 7523987456? 981913600????????? 0? 260141056 6601129984
-/+ buffers/cache:? 662716416 7843184640
Swap:?? 8587149312???? 163840 8586985472
? 其中,“-b”表示以千字節(也就是1024字節為單位)來顯示內存使用情況。
2.2 通過watch與free相結合動態監控內存狀況
?watch是一個非常有用的命令,幾乎每個linux發行版都帶有這個工具,通過watch,可以動態的監控命令的運行結果,省去手動執行的麻煩。
? 可以在watch后面跟上需要運行的命令,watch就會自動重復去運行這個命令,默認是2秒鐘執行一次,并把執行的結果更新在屏幕上。例如:
[root@webserver ~]# watch -n 3 -d free
?Every 3.0s: free?????????????????????????????????? Sun Nov 30 16:23:20 2008

???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:?????? 8306544??? 7349548???? 956996????????? 0???? 203296??? 6500024
-/+ buffers/cache:???? 646228??? 7660316
Swap:????? 8385888??????? 160??? 8385728
其中,“-n”指定重復執行的時間,“-d”表示高亮顯示變動。
2.3 vmstat命令監控內存
vmstat命令在監控系統內存方面功能強大,請看下面的一個輸出:
procs? -----------memory----------? ---swap--? -----io---- --system--?? ----cpu----
?r? b?? swpd??? free buff??? cache?? si?? so??? bi??? bo??? in??? cs??? us sy id?? wa
?0? 0? 906440? 22796 155616 1325496? 340? 180??? 2???? 4???? 1???? 4??? 80? 0? 10? 10
?0? 0? 906440? 42796 155616 1325496? 320? 289??? 0??? 54??? 1095? 287?? 70? 15? 0? 15
?0? 0? 906440? 42884 155624 1325748? 236? 387??? 2?? 102??? 1064?? 276? 78? 2?? 5? 15
?對于內存的監控,在vmstat中重點關注的是swpd、si和so行,從這個輸出可以看出,此系統內存資源緊缺,swpd占用了900M左右內存,si和so占用很大,而由于系統內存的緊缺,導致出現15%左右的系統等待,此時增加系統的內存是必須要做的。
2.4 sar -r命令組合
sar命令也可以監控linux的內存使用狀況,可以通過“sar –r”組合查看系統內存和交換空間的使用率。請看下面的一個輸出:
?[root@webserver ~]# sar -r 2 3
Linux 2.6.9-42.ELsmp (webserver)??????? 11/30/2008????? _i686_? (8 CPU)

09:57:33 PM kbmemfree kbmemused? %memused kbbuffers? kbcached? kbcommit?? %commit
09:57:35 PM??? 897988?? 7408556???? 89.19??? 249428?? 6496532??? 786556????? 4.71
09:57:37 PM??? 898564?? 7407980???? 89.18??? 249428?? 6496532??? 784276????? 4.70
09:57:39 PM??? 899196?? 7407348???? 89.17??? 249440?? 6496520??? 782132????? 4.69
Average:?????? 898583?? 7407961???? 89.18??? 249432?? 6496528??? 784321????? 4.70
其中:
Kbmemfree表示空閑物理內存大小,kbmemused表示已使用的物理內存空間大小,%memused表示已使用內存占總內存大小的百分比,kbbuffers和kbcached分別表示Buffer Cache和Page Cache的大小,kbcommit和%commit分別表示應用程序當前使用的內存大小和使用百分比。
可以看出sar的輸出其實與free的輸出完全對應,不過sar更加人性化,不但給出了內存使用量,還給出了內存使用的百分比以及統計的平均值。從%commit項可知,此系統目前內存資源充足。
2.5 本節小結
?上面介紹了內存監控常用的幾個指令以及一些經驗規則,其實現在的系統在內存方面出現的瓶頸已經很少,因為內存價格很低,充足的內存已經完全能滿足應用程序和系統本身的需要,如果系統在內存方面出現瓶頸,很大的可能是應用程序本身的問題造成的。
3 磁盤I/O性能評估
?在對磁盤I/O性能做評估之前,必須知道的幾個方面是:
? 熟悉RAID存儲方式,可以根據應用的不同,選擇不同的RAID方式,例如,如果一個應用經常有大量的讀操作,可以選擇RAID5方式構建磁盤陣列存儲數據,如果應用有大量的、頻繁的寫操作,可以選擇raid0存取方式,如果應用對數據安全要求很高,同時對讀寫也有要求的話,可以考慮raid01存取方式等等。
? 盡可能用內存的讀寫代替直接磁盤I/O,使頻繁訪問的文件或數據放入內存中進行操作處理,因為內存讀寫操作比直接磁盤讀寫的效率要高千倍。
? 將經常進行讀寫的文件與長期不變的文件獨立出來,分別放置到不同的磁盤設備上。
? 對于寫操作頻繁的數據,可以考慮使用裸設備代替文件系統。這里簡要講述下文件系統與裸設備的對比:
使用裸設備的優點有:
? 數據可以直接讀寫,不需要經過操作系統級的緩存,節省了內存資源,避免了內存資源爭用。
? 避免了文件系統級的維護開銷,比如文件系統需要維護超級塊、I-node等。
? 避免了操作系統的cache預讀功能,減少了I/O請求。
使用裸設備的缺點是:
? 數據管理、空間管理不靈活,需要很專業的人來操作。
其實裸設備的優點就是文件系統的缺點,反之也是如此,這就需要我們做出合理的規劃和衡量,根據應用的需求,做出對應的策略。
下面接著介紹對磁盤IO的評估標準。
3.1 sar -d命令組合
?通過“sar –d”組合,可以對系統的磁盤IO做一個基本的統計,請看下面的一個輸出:
[root@webserver ~]# sar -d 2 3
Linux 2.6.9-42.ELsmp (webserver)??????? 11/30/2008????? _i686_? (8 CPU)

linux內核優化。11:09:33 PM? DEV?? tps?? rd_sec/s wr_sec/s? avgrq-sz? avgqu-sz? await? svctm?? %util
11:09:35 PM dev8-0? 0.00? 0.00???? 0.00????? 0.00????? 0.00????? 0.00?? 0.00??? 0.00

11:09:35 PM? DEV?? tps? rd_sec/s? wr_sec/s? avgrq-sz? avgqu-sz? await?? svctm?? %util
11:09:37 PM dev8-0? 1.00? 0.00???? 12.00???? 12.00????? 0.00???? 0.00??? 0.00??? 0.00

11:09:37 PM?? DEV?? tps? rd_sec/s? wr_sec/s? avgrq-sz? avgqu-sz? await? svctm? %util
11:09:39 PM dev8-0? 1.99?? 0.00??? 47.76???? 24.00???? 0.00????? 0.50??? 0.25??? 0.05

linux命令窗口?Average:? DEV???? tps??? rd_sec/s? wr_sec/s? avgrq-sz? avgqu-sz? await? svctm?? %util
Average:? dev8-0? 1.00?? 0.00????? 19.97???? 20.00????? 0.00???? 0.33??? 0.17??? 0.02
?對上面每項的輸出解釋如下:
? 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系統已經滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,可以通過優化程序或者通過更換更高、更快的磁盤來解決此問題。
3.2 iostat –d命令組合
?通過“iostat –d”命令組合也可以查看系統磁盤的使用狀況,請看如下輸出:
?[root@webserver ~]#?? iostat -d 2 3
Linux 2.6.9-42.ELsmp (webserver)??????? 12/01/2008????? _i686_? (8 CPU)

Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
sda?????????????? 1.87???????? 2.58?????? 114.12??? 6479462? 286537372

Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
sda?????????????? 0.00???????? 0.00???????? 0.00????????? 0????????? 0

Linux性能優化。Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
sda?????????????? 1.00???????? 0.00??????? 12.00????????? 0???????? 24
?對上面每項的輸出解釋如下:
? Blk_read/s表示每秒讀取的數據塊數。
? Blk_wrtn/s表示每秒寫入的數據塊數。
? Blk_read表示讀取的所有塊數
? Blk_wrtn表示寫入的所有塊數。
這里需要注意的一點是:上面輸出的第一項是系統從啟動以來到統計時的所有傳輸信息,從第二次輸出的數據才代表在檢測的時間段內系統的傳輸值。
可以通過Blk_read/s和Blk_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果Blk_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程序,如果Blk_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數據放入內存中進行操作。對于這兩個選項的值沒有一個固定的大小,根據系統應用的不同,會有不同的值,但是有一個規則還是可以遵循的:長期的、超大的數據讀寫,肯定是不正常的,這種情況一定會影響系統性能。
“iostat –x”組合還提供了對每個磁盤的單獨統計,如果不指定磁盤,默認是對所有磁盤進行統計,請看下面的一個輸出:
[root@webserver ~]#?? iostat -x /dev/sda? 2 3
Linux 2.6.9-42.ELsmp (webserver)??????? 12/01/2008????? _i686_? (8 CPU)

avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle
?????????? 2.45??? 0.00??? 0.30??? 0.24??? 0.00?? 97.03

Device: rrqm/s? wrqm/s? r/s? w/s? rsec/s? wsec/s avgrq-sz avgqu-sz?? await? svctm? %util
sda?? 0.01???? 12.48??? 0.10? 1.78? 2.58?? 114.03??? 62.33?? 0.07??? 38.39?? 1.30?? 0.24

docker優化、avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle
?????????? 3.97??? 0.00??? 1.83??? 8.19??? 0.00?? 86.14

Device:rrqm/s wrqm/s?? r/s? w/s?? rsec/s? wsec/s avgrq-sz avgqu-sz?? await? svctm? %util
sda??? 0.00?? 195.00? 0.00 18.00? 0.00? 1704.00??? 94.67???? 0.04??? 2.50?? 0.11?? 0.20

avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle
?????????? 4.04??? 0.00??? 1.83??? 8.01??? 0.00?? 86.18

Device: rrqm/s? wrqm/s? r/s? w/s?? rsec/s?? wsec/s avgrq-sz avgqu-sz???? await? svctm? %util
sda??? 0.00???? 4.50??? 0.00?? 7.00?? 0.00??? 92.00??? 13.14???? 0.01??? 0.79?? 0.14?? 0.10
這個輸出基本與“sar –d”相同,需要說明的幾個選項的含義為:
? rrqm/s表示每秒進行merged的讀操作數目。
? wrqm/s表示每秒進行 merge 的寫操作數目。
? r/s表示每秒完成讀I/O設備的次數。
? w/s表示每秒完成寫I/O設備的次數。
? rsec/s表示每秒讀取的扇區數。
? wsec/s表示每秒寫入的扇區數。
3.3 vmstat –d組合
?通過“vmstat –d”組合也可以查看磁盤的統計數據,情況下面的一個輸出:

[root@webserver ~]# vmstat -d 3 2|grep sda
disk- ------------reads------------ ------------writes----------- -----IO------
???? total? merged sectors??? ms??? total??? merged?? sectors????? ms???? cur??? sec
sda? 239588 29282? 6481862? 1044442 4538678? 32387680 295410812? 186025580? 0?? 6179
disk- ------------reads------------ ------------writes----------- -----IO------
???? total? merged? sectors? ms??? total???? merged??? sectors???? ms???? cur?? sec
sda? 239588 29282? 6481862 1044442 4538680?? 32387690 295410908 186025581? 0?? 6179
?這個輸出顯示了磁盤的reads、writes和IO的使用狀況。
3.4 本節小結
?上面主要講解了對磁盤I/O的性能評估,其實衡量磁盤I/O好壞是多方面的,有應用程序本身的,也有硬件設計上的,還有系統自身配置的問題等,要解決I/O的瓶頸,關鍵是要提高I/O子系統的執行效率。例如,首要要從應用程序上對磁盤讀寫進行優化,能夠放到內存執行的操作,盡量不要放到磁盤,同時對磁盤存儲方式進行合理規劃,選擇適合自己的RAID存取方式,最后,在系統級別上,可以選擇適合自身應用的文件系統,必要時使用裸設備提高讀寫性能。
4 網絡性能評估
?網絡性能的好壞直接影響應用程序對外提供服務的穩定性和可靠性,監控網絡性能,可以從以下幾個方面進行管理和優化。
4.1 通過ping命令檢測網絡的連通性
?如果發現網絡反應 緩慢,或者連接中斷,可以通過ping來測試網絡的連通情況,請看下面的一個輸出:
[root@webserver ~]# ping 10.10.1.254
PING 10.10.1.254 (10.10.1.254) 56(84) bytes of data.
64 bytes from 10.10.1.254: icmp_seq=0 ttl=64 time=0.235 ms
64 bytes from 10.10.1.254: icmp_seq=1 ttl=64 time=0.164 ms
64 bytes from 10.10.1.254: icmp_seq=2 ttl=64 time=0.210 ms
64 bytes from 10.10.1.254: icmp_seq=3 ttl=64 time=0.178 ms
64 bytes from 10.10.1.254: icmp_seq=4 ttl=64 time=0.525 ms
64 bytes from 10.10.1.254: icmp_seq=5 ttl=64 time=0.571 ms
64 bytes from 10.10.1.254: icmp_seq=6 ttl=64 time=0.220 ms
--- 10.10.1.254 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6000ms
rtt min/avg/max/mdev = 0.164/0.300/0.571/0.159 ms, pipe 2
?在這個輸出中,time值顯示了兩臺主機之間的網絡延時情況,如果此值很大,則表示網絡的延時很大,單位為毫秒。在這個輸出的最后,是對上面輸出信息的一個總結,packet loss表示網絡的丟包率,此值越小,表示網絡的質量越高。
4.2 通過netstat –i組合檢測網絡接口狀況
netstat命令提供了網絡接口的詳細信息,請看下面的輸出:
[root@webserver ~]# netstat -i
Kernel Interface table
Iface MTU? Met RX-OK???? RX-ERR RX-DRP RX-OVR?? TX-OK??? TX-ERR TX-DRP TX-OVR?????? Flg
eth0? 1500? 0 1313129253? 0????? 0?????? 0???? 1320686497??? 0????? 0????? 0??????? BMRU
eth1? 1500? 0 494902025?? 0????? 0?????? 0???? 292358810???? 0????? 0????? 0??????? BMRU
lo?? 16436? 0 41901601??? 0????? 0?????? 0???? 41901601????? 0????? 0????? 0??????? LRU
?對上面每項的輸出解釋如下:
? Iface表示網絡設備的接口名稱。
? MTU表示最大傳輸單元,單位字節。
? RX-OK/TX-OK表示已經準確無誤的接收/發送了多少數據包。
? RX-ERR/TX-ERR表示接收/發送數據包時產生了多少錯誤。
? RX-DRP/TX-DRP表示接收/發送數據包時丟棄了多少數據包。
? RX-OVR/TX-OVR表示由于誤差而遺失了多少數據包。
? Flg表示接口標記,其中:
? L:表示該接口是個回環設備。
? B:表示設置了廣播地址。
? M:表示接收所有數據包。
? R:表示接口正在運行。
? U:表示接口處于活動狀態。
? O:表示在該接口上禁用arp。
? P:表示一個點到點的連接。
正常情況下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都應該為0,如果這幾個選項的值不為0,并且很大,那么網絡質量肯定有問題,網絡傳輸性能也一定會下降。
當網絡傳輸存在問題是,可以檢測網卡設備是否存在故障,如果可能,可以升級為千兆網卡或者光纖網絡,還可以檢查網絡部署環境是否合理。
4.3 通過netstat –r組合檢測系統的路由表信息
?在網絡不通,或者網絡異常時,首先想到的就是檢查系統的路由表信息,“netstat –r”的輸出結果與route命令的輸出完全相同,請看下面的一個實例:
[root@webserver ~]#? netstat -r
Kernel IP routing table
Destination???? Gateway???????? Genmask???????? Flags?? MSS Window? irtt Iface
10.10.1.0?????? *?????????????? 255.255.255.0?? U???????? 0?? 0?????? 0? eth0
192.168.200.0?? *?????????????? 255.255.255.0?? U???????? 0?? 0?????? 0? eth1
169.254.0.0???? *?????????????? 255.255.0.0???? U???????? 0?? 0?????? 0? eth1
default???????? 10.10.1.254???? 0.0.0.0???????? UG??????? 0?? 0?????? 0? eth0
?關于輸出中每項的具體含義,已經在前面章節進行過詳細介紹,這里不再多講,這里我們重點關注的是default行對應的值,default項表示系統的默認路由,對應的網絡接口為eth0。
4.4 通過sar –n組合顯示系統的網絡運行狀態
?sar提供四種不同的選項來顯示網絡統計信息,通過“-n”選項可以指定4個不同類型的開關:DEV、EDEV、SOCK和FULL。DEV顯示網絡接口信息,EDEV顯示關于網絡錯誤的統計數據,SOCK顯示套接字信息,FULL顯示所有三個開關。請看下面的一個輸出:
[root@webserver ~]# sar -n DEV 2 3
Linux 2.6.9-42.ELsmp (webserver)??????? 12/01/2008????? _i686_? (8 CPU)

02:22:31 PM???? IFACE?? rxpck/s?? txpck/s??? rxkB/s??? txkB/s?? rxcmp/s?? txcmp/s? rxmcst/s
02:22:33 PM??????? lo???? 31.34???? 31.34???? 37.53???? 37.53????? 0.00????? 0.00????? 0.00
02:22:33 PM????? eth0??? 199.50??? 279.60???? 17.29??? 344.12????? 0.00????? 0.00????? 0.00
02:22:33 PM????? eth1????? 5.47????? 4.98????? 7.03????? 0.36????? 0.00????? 0.00????? 0.00
02:22:33 PM????? sit0????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00

02:22:33 PM???? IFACE?? rxpck/s?? txpck/s??? rxkB/s??? txkB/s?? rxcmp/s?? txcmp/s? rxmcst/s
02:22:35 PM??????? lo???? 67.66???? 67.66???? 74.34???? 74.34????? 0.00????? 0.00????? 0.00
02:22:35 PM????? eth0??? 159.70??? 222.39???? 19.74??? 217.16????? 0.00????? 0.00????? 0.00
02:22:35 PM????? eth1????? 3.48????? 4.48????? 0.44????? 0.51????? 0.00????? 0.00????? 0.00
02:22:35 PM????? sit0????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00

02:22:35 PM???? IFACE?? rxpck/s?? txpck/s??? rxkB/s??? txkB/s?? rxcmp/s?? txcmp/s? rxmcst/s
02:22:37 PM??????? lo????? 4.52????? 4.52????? 9.25????? 9.25????? 0.00????? 0.00????? 0.00
02:22:37 PM????? eth0??? 102.51??? 133.67???? 20.67??? 116.14????? 0.00????? 0.00????? 0.00
02:22:37 PM????? eth1???? 27.14???? 67.34????? 2.42???? 89.26????? 0.00????? 0.00????? 0.00
02:22:37 PM????? sit0????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00

Average:??????? IFACE?? rxpck/s?? txpck/s??? rxkB/s??? txkB/s?? rxcmp/s?? txcmp/s? rxmcst/s
Average:?????????? lo???? 34.61???? 34.61???? 40.48???? 40.48????? 0.00????? 0.00????? 0.00
Average:???????? eth0??? 154.08??? 212.15???? 19.23??? 226.17????? 0.00????? 0.00????? 0.00
Average:???????? eth1???? 11.98???? 25.46????? 3.30???? 29.85????? 0.00????? 0.00????? 0.00
Average:???????? sit0????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00????? 0.00
對上面每項的輸出解釋如下:
? IFACE表示網絡接口設備。
? rxpck/s表示每秒鐘接收的數據包大小。
? txpck/s表示每秒鐘發送的數據包大小。
? rxkB/s表示每秒鐘接收的字節數。
? txkB/s表示每秒鐘發送的字節數。
? rxcmp/s表示每秒鐘接收的壓縮數據包。
? txcmp/s表示每秒鐘發送的壓縮數據包。
? rxmcst/s表示每秒鐘接收的多播數據包。
通過“sar –n”的輸出,可以清楚的顯示網絡接口發送、接收數據的統計信息。此外還可以通過“sar -n EDEV 2 3”來統計網絡錯誤信息等。
4.5 小結
本節通過幾個常用的網絡命令介紹了對網絡性能的評估,事實上,網絡問題是簡單而且容易處理的,只要我們根據上面給出的命令,一般都能迅速定位問題。解決問題的方法一般是增加網絡帶寬,或者優化網絡部署環境。
?除了上面介紹的幾個命令外,排查網絡問題經常用到的命令還有traceroute,主要用于跟蹤數據包的傳輸路徑,還有nslookup命令,主要用于判斷DNS解析信息。

?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/123909.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息