日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

linux需要检测的系统资源不足,细说Linux 系统优化

發(fā)布時間:2024/1/23 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux需要检测的系统资源不足,细说Linux 系统优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作為一名linux系統(tǒng)管理員,最主要的工作是優(yōu)化系統(tǒng)配置,使應(yīng)用在系統(tǒng)上以最優(yōu)的狀態(tài)運行,但是由于硬件問題、軟件問題、網(wǎng)絡(luò)環(huán)境等的復(fù)雜性和多變性,導(dǎo)致對系統(tǒng)的優(yōu)化變得異常復(fù)雜,如何定位性能問題出在哪個方面,是性能優(yōu)化的一大難題,本章從系統(tǒng)入手,重點講述由于系統(tǒng)軟、硬件配置不當(dāng)可能造成的性能問題,并且給出了檢測系統(tǒng)故障和優(yōu)化性能的一般方法和流程。

1 cpu性能評估

Cpu是影響Linux性能的主要因素之一,下面先介紹幾個查看CPU性能的命令。

1.1 vmstat命令

該命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡要信息,這里我們主要用它來看CPU的一個負載情況。

下面是vmstat命令在某個系統(tǒng)的輸出結(jié)果:

[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時間片的進程數(shù),這個值如果長期大于系統(tǒng)CPU的個數(shù),說明CPU不足,需要增加CPU。

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

memory

swpd列表示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以k為單位)。如果swpd的值不為0,或者比較大,只要si、so的值長期為0,這種情況下一般不用擔(dān)心,不會影響系統(tǒng)性能。

free列表示當(dāng)前空閑的物理內(nèi)存數(shù)量(以k為單位)

buff列表示buffers cache的內(nèi)存數(shù)量,一般對塊設(shè)備的讀寫才需要緩沖。

cache列表示page cached的內(nèi)存數(shù)量,一般作為文件系統(tǒng)cached,頻繁訪問的文件都會被cached,如果cache值較大,說明cached的文件數(shù)較多,如果此時IO中bi比較小,說明文件系統(tǒng)效率比較好。

swap

si列表示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進入內(nèi)存交換區(qū)的數(shù)量。

so列表示由內(nèi)存調(diào)入磁盤,也就是內(nèi)存交換區(qū)進入內(nèi)存的數(shù)量。

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

IO項顯示磁盤讀寫狀況

Bi列表示從塊設(shè)備讀入數(shù)據(jù)的總量(即讀磁盤)(每秒kb)。

Bo列表示寫入到塊設(shè)備的數(shù)據(jù)總量(即寫磁盤)(每秒kb)

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

system 顯示采集間隔內(nèi)發(fā)生的中斷數(shù)

in列表示在某一時間間隔中觀測到的每秒設(shè)備中斷數(shù)。

cs列表示每秒產(chǎn)生的上下文切換次數(shù)。

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

CPU項顯示了CPU的使用狀態(tài),此列是我們關(guān)注的重點。

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

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

根據(jù)經(jīng)驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。

id 列顯示了CPU處在空閑狀態(tài)的時間百分比。

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

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

1.2??sar命令

檢查CPU性能的第二個工具是sar,sar功能很強大,可以對系統(tǒng)的每個方面進行單獨的統(tǒng)計,但是使用sar命令會增加系統(tǒng)開銷,不過這些開銷是可以評估的,對系統(tǒng)的統(tǒng)計結(jié)果不會有很大影響。

下面是sar命令對某個系統(tǒng)的CPU統(tǒng)計輸出:

[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列顯示了系統(tǒng)進程消耗的CPU時間百分比。

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

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

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

這個輸出是對系統(tǒng)整體CPU使用狀況的統(tǒng)計,每項的輸出都非常直觀,并且最后一行Average是個匯總行,是上面統(tǒng)計信息的一個平均值。

需要注意的一點是:第一行的統(tǒng)計信息中包含了sar本身的統(tǒng)計消耗,所以%user列的值會偏高一點,不過,這不會對統(tǒng)計結(jié)果產(chǎn)生多大影響。

在一個多CPU的系統(tǒng)中,如果程序使用了單線程,會出現(xiàn)這么一個現(xiàn)象,CPU的整體使用率不高,但是系統(tǒng)應(yīng)用卻響應(yīng)緩慢,這可能是由于程序使用單線程的原因,單線程只使用一個CPU,導(dǎo)致這個CPU占用率為100%,無法處理其它請求,而其它的CPU卻閑置,這就導(dǎo)致了整體CPU使用率不高,而應(yīng)用緩慢 現(xiàn)象的發(fā)生 。

針對這個問題,可以對系統(tǒng)的每個CPU分開查詢,統(tǒng)計每個CPU的使用情況:

[root@webserver ~]# sar -P 0 3 5

Linux 2.6.9-42.ELsmp (webserver)????????11/29/2008??????_i686_??(8 CPU)

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

這個輸出是對系統(tǒng)的第一顆CPU的信息統(tǒng)計,需要注意的是,sar中對CPU的計數(shù)是從0開始的,因此,“sar -P 0 3 5”表示對系統(tǒng)的第一顆CPU進行信息統(tǒng)計,“sar -P 4 3 5”則表示對系統(tǒng)的第五顆CPU進行統(tǒng)計。依次類推。可以看出,上面的系統(tǒng)有八顆CPU。

1.3 iostat命令

iostat指令主要用于統(tǒng)計磁盤IO狀態(tài),但是也能查看CPU的使用信息,它的局限性是只能顯示系統(tǒng)所有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”參數(shù),只顯示系統(tǒng)CPU的統(tǒng)計信息,輸出中每項代表的含義與sar命令的輸出項完全相同,不再詳述。

1.4 uptime命令

uptime是監(jiān)控系統(tǒng)性能最常用的一個命令,主要用來統(tǒng)計系統(tǒng)當(dāng)前的運行狀況,輸出的信息依次為:系統(tǒng)現(xiàn)在的時間、系統(tǒng)從上次開機到現(xiàn)在運行了多長時間、系統(tǒng)目前有多少登陸用戶、系統(tǒng)在一分鐘內(nèi)、五分鐘內(nèi)、十五分鐘內(nèi)的平均負載。看下面的一個輸出:

[root@webserver ~]# uptime

18:52:11 up 27 days, 19:44,??2 users,??load average: 0.12, 0.08, 0.08

這里需要注意的是load average這個輸出值,這三個值的大小一般不能大于系統(tǒng)CPU的個數(shù),例如,本輸出中系統(tǒng)有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負載很高,可能會影響系統(tǒng)性能,但是偶爾大于8時,倒不用擔(dān)心,一般不會影響系統(tǒng)性能。相反,如果load average的輸出值小于CPU的個數(shù),則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。

1.5 本節(jié)小結(jié)

上面介紹了檢查CPU使用狀況的四個命令,通過這些命令需要了解的是:系統(tǒng)CPU是否出現(xiàn)性能瓶頸,也就是說,以上這些命令只能查看CPU是否繁忙,負載是否過大,但是無法知道CPU為何負載過大,因而,判斷系統(tǒng)CPU出現(xiàn)問題后,要結(jié)合top、ps等命令進一步檢查是由那些進程導(dǎo)致CPU負載過大的。引起CPU資源緊缺的原因可能是應(yīng)用程序不合理造成的,也可能是硬件資源匱乏引起的,所以,要具體問題具體分析,或者優(yōu)化應(yīng)用程序,或者增加系統(tǒng)CPU資源。

2 內(nèi)存性能評估

內(nèi)存的管理和優(yōu)化是系統(tǒng)性能優(yōu)化的一個重要部分,內(nèi)存資源的充足與否直接影響應(yīng)用系統(tǒng)的使用性能,在進行內(nèi)存優(yōu)化之前,一定要熟悉linux的內(nèi)存管理機制,這一點我們在前面的章節(jié)已經(jīng)有深入講述,本節(jié)的重點是如何通過系統(tǒng)命令監(jiān)控linux系統(tǒng)的內(nèi)存使用狀況。

2.1 free 命令

free是監(jiān)控linux內(nèi)存使用狀況最常用的指令,看下面的一個輸出:

[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為單位查看內(nèi)存使用情況,在這個輸出中,我們重點關(guān)注的應(yīng)該是free列與cached列的輸出值,由輸出可知,此系統(tǒng)共8G內(nèi)存,系統(tǒng)空閑內(nèi)存還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統(tǒng)緩存了很多的文件和目錄,而對于應(yīng)用程序來說,可以使用的內(nèi)存還有7468M,當(dāng)然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區(qū)還未使用。所以從應(yīng)用的角度來說,此系統(tǒng)內(nèi)存資源還非常充足。

一般有這樣一個經(jīng)驗公式:應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%時,表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能,應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%時,表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存,20%

free命令還可以適時的監(jiān)控內(nèi)存的使用狀況,使用“-s”參數(shù)可以在指定的時間段內(nèi)不間斷的監(jiān)控內(nèi)存的使用情況:

[root@webserver ~]# free -b -s 5 -m

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

total???????used???????free?????shared????buffers?????cached

Mem:????8505901056 7523987456??981913600??????????0??260141056 6601129984

-/+ buffers/cache:??662716416 7843184640

Swap:???8587149312?????163840 8586985472

其中,“-b”表示以千字節(jié)(也就是1024字節(jié)為單位)來顯示內(nèi)存使用情況。

2.2 通過watch與free相結(jié)合動態(tài)監(jiān)控內(nèi)存狀況

watch是一個非常有用的命令,幾乎每個linux發(fā)行版都帶有這個工具,通過watch,可以動態(tài)的監(jiān)控命令的運行結(jié)果,省去手動執(zhí)行的麻煩。

可以在watch后面跟上需要運行的命令,watch就會自動重復(fù)去運行這個命令,默認是2秒鐘執(zhí)行一次,并把執(zhí)行的結(jié)果更新在屏幕上。例如:

[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”指定重復(fù)執(zhí)行的時間,“-d”表示高亮顯示變動。

2.3 vmstat命令監(jiān)控內(nèi)存

vmstat命令在監(jiān)控系統(tǒng)內(nèi)存方面功能強大,請看下面的一個輸出:

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

對于內(nèi)存的監(jiān)控,在vmstat中重點關(guān)注的是swpd、si和so行,從這個輸出可以看出,此系統(tǒng)內(nèi)存資源緊缺,swpd占用了900M左右內(nèi)存,si和so占用很大,而由于系統(tǒng)內(nèi)存的緊缺,導(dǎo)致出現(xiàn)15%左右的系統(tǒng)等待,此時增加系統(tǒng)的內(nèi)存是必須要做的。

2.4 sar -r命令組合

sar命令也可以監(jiān)控linux的內(nèi)存使用狀況,可以通過“sar –r”組合查看系統(tǒng)內(nèi)存和交換空間的使用率。請看下面的一個輸出:

[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表示空閑物理內(nèi)存大小,kbmemused表示已使用的物理內(nèi)存空間大小,%memused表示已使用內(nèi)存占總內(nèi)存大小的百分比,kbbuffers和kbcached分別表示Buffer Cache和Page Cache的大小,kbcommit和%commit分別表示應(yīng)用程序當(dāng)前使用的內(nèi)存大小和使用百分比。

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

2.5 本節(jié)小結(jié)

上面介紹了內(nèi)存監(jiān)控常用的幾個指令以及一些經(jīng)驗規(guī)則,其實現(xiàn)在的系統(tǒng)在內(nèi)存方面出現(xiàn)的瓶頸已經(jīng)很少,因為內(nèi)存價格很低,充足的內(nèi)存已經(jīng)完全能滿足應(yīng)用程序和系統(tǒng)本身的需要,如果系統(tǒng)在內(nèi)存方面出現(xiàn)瓶頸,很大的可能是應(yīng)用程序本身的問題造成的。

3 磁盤I/O性能評估

在對磁盤I/O性能做評估之前,必須知道的幾個方面是:

熟悉RAID存儲方式,可以根據(jù)應(yīng)用的不同,選擇不同的RAID方式,例如,如果一個應(yīng)用經(jīng)常有大量的讀操作,可以選擇RAID5方式構(gòu)建磁盤陣列存儲數(shù)據(jù),如果應(yīng)用有大量的、頻繁的寫操作,可以選擇raid0存取方式,如果應(yīng)用對數(shù)據(jù)安全要求很高,同時對讀寫也有要求的話,可以考慮raid01存取方式等等。

盡可能用內(nèi)存的讀寫代替直接磁盤I/O,使頻繁訪問的文件或數(shù)據(jù)放入內(nèi)存中進行操作處理,因為內(nèi)存讀寫操作比直接磁盤讀寫的效率要高千倍。

將經(jīng)常進行讀寫的文件與長期不變的文件獨立出來,分別放置到不同的磁盤設(shè)備上。

對于寫操作頻繁的數(shù)據(jù),可以考慮使用裸設(shè)備代替文件系統(tǒng)。這里簡要講述下文件系統(tǒng)與裸設(shè)備的對比:

使用裸設(shè)備的優(yōu)點有:

數(shù)據(jù)可以直接讀寫,不需要經(jīng)過操作系統(tǒng)級的緩存,節(jié)省了內(nèi)存資源,避免了內(nèi)存資源爭用。

避免了文件系統(tǒng)級的維護開銷,比如文件系統(tǒng)需要維護超級塊、I-node等。

避免了操作系統(tǒng)的cache預(yù)讀功能,減少了I/O請求。

使用裸設(shè)備的缺點是:

數(shù)據(jù)管理、空間管理不靈活,需要很專業(yè)的人來操作。

其實裸設(shè)備的優(yōu)點就是文件系統(tǒng)的缺點,反之也是如此,這就需要我們做出合理的規(guī)劃和衡量,根據(jù)應(yīng)用的需求,做出對應(yīng)的策略。

下面接著介紹對磁盤IO的評估標(biāo)準(zhǔn)。

3.1 sar -d命令組合

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

[root@webserver ~]# sar -d 2 3

Linux 2.6.9-42.ELsmp (webserver)????????11/30/2008??????_i686_??(8 CPU)

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

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表示磁盤設(shè)備名稱。

tps表示每秒到物理磁盤的傳送數(shù),也就是每秒的I/O流量。一個傳送就是一個I/O請求,多個邏輯請求可以被合并為一個物理I/O請求。

rd_sec/s表示每秒從設(shè)備讀取的扇區(qū)數(shù)(1扇區(qū)=512字節(jié))。

wr_sec/s表示每秒寫入設(shè)備的扇區(qū)數(shù)目。

avgrq-sz表示平均每次設(shè)備I/O操作的數(shù)據(jù)大小(以扇區(qū)為單位)。

avgqu-sz表示平均I/O隊列長度。

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

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

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

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

avgrq-sz類似與超市排隊中每人所買東西的多少。

avgqu-sz類似與超市排隊中單位時間內(nèi)平均排隊的人數(shù)。

await類似與超市排隊中每人的等待時間。

svctm類似與超市排隊中收銀員的收款速度。

%util類似與超市收銀臺前有人排隊的時間比例。

對以磁盤IO性能,一般有如下評判標(biāo)準(zhǔn):

正常情況下svctm應(yīng)該是小于await值的,而svctm的大小和磁盤性能有關(guān),CPU、內(nèi)存的負荷也會對svctm值造成影響,過多的請求也會間接的導(dǎo)致svctm值的增加。

await值的大小一般取決與svctm的值和I/O隊列長度以及I/O請求模式,如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應(yīng)用程序?qū)⒆兟?#xff0c;此時可以通過更換更快的硬盤來解決問題。

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

3.2 iostat –d命令組合

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

[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

Device:????????????tps???Blk_read/s???Blk_wrtn/s???Blk_read???Blk_wrtn

sda???????????????1.00?????????0.00????????12.00??????????0?????????24

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

Blk_read/s表示每秒讀取的數(shù)據(jù)塊數(shù)。

Blk_wrtn/s表示每秒寫入的數(shù)據(jù)塊數(shù)。

Blk_read表示讀取的所有塊數(shù)

Blk_wrtn表示寫入的所有塊數(shù)。

這里需要注意的一點是:上面輸出的第一項是系統(tǒng)從啟動以來到統(tǒng)計時的所有傳輸信息,從第二次輸出的數(shù)據(jù)才代表在檢測的時間段內(nèi)系統(tǒng)的傳輸值。

可以通過Blk_read/s和Blk_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果Blk_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優(yōu)化磁盤或者優(yōu)化程序,如果Blk_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數(shù)據(jù)放入內(nèi)存中進行操作。對于這兩個選項的值沒有一個固定的大小,根據(jù)系統(tǒng)應(yīng)用的不同,會有不同的值,但是有一個規(guī)則還是可以遵循的:長期的、超大的數(shù)據(jù)讀寫,肯定是不正常的,這種情況一定會影響系統(tǒng)性能。

“iostat –x”組合還提供了對每個磁盤的單獨統(tǒng)計,如果不指定磁盤,默認是對所有磁盤進行統(tǒng)計,請看下面的一個輸出:

[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

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的讀操作數(shù)目。

wrqm/s表示每秒進行 merge 的寫操作數(shù)目。

r/s表示每秒完成讀I/O設(shè)備的次數(shù)。

w/s表示每秒完成寫I/O設(shè)備的次數(shù)。

rsec/s表示每秒讀取的扇區(qū)數(shù)。

wsec/s表示每秒寫入的扇區(qū)數(shù)。

3.3 vmstat –d組合

通過“vmstat –d”組合也可以查看磁盤的統(tǒng)計數(shù)據(jù),情況下面的一個輸出:

[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 本節(jié)小結(jié)

上面主要講解了對磁盤I/O的性能評估,其實衡量磁盤I/O好壞是多方面的,有應(yīng)用程序本身的,也有硬件設(shè)計上的,還有系統(tǒng)自身配置的問題等,要解決I/O的瓶頸,關(guān)鍵是要提高I/O子系統(tǒng)的執(zhí)行效率。例如,首要要從應(yīng)用程序上對磁盤讀寫進行優(yōu)化,能夠放到內(nèi)存執(zhí)行的操作,盡量不要放到磁盤,同時對磁盤存儲方式進行合理規(guī)劃,選擇適合自己的RAID存取方式,最后,在系統(tǒng)級別上,可以選擇適合自身應(yīng)用的文件系統(tǒng),必要時使用裸設(shè)備提高讀寫性能。

4 網(wǎng)絡(luò)性能評估

網(wǎng)絡(luò)性能的好壞直接影響應(yīng)用程序?qū)ν馓峁┓?wù)的穩(wěn)定性和可靠性,監(jiān)控網(wǎng)絡(luò)性能,可以從以下幾個方面進行管理和優(yōu)化。

4.1 通過ping命令檢測網(wǎng)絡(luò)的連通性

如果發(fā)現(xiàn)網(wǎng)絡(luò)反應(yīng)緩慢,或者連接中斷,可以通過ping來測試網(wǎng)絡(luò)的連通情況,請看下面的一個輸出:

[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值顯示了兩臺主機之間的網(wǎng)絡(luò)延時情況,如果此值很大,則表示網(wǎng)絡(luò)的延時很大,單位為毫秒。在這個輸出的最后,是對上面輸出信息的一個總結(jié),packet loss表示網(wǎng)絡(luò)的丟包率,此值越小,表示網(wǎng)絡(luò)的質(zhì)量越高。

4.2 通過netstat –i組合檢測網(wǎng)絡(luò)接口狀況

netstat命令提供了網(wǎng)絡(luò)接口的詳細信息,請看下面的輸出:

[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表示網(wǎng)絡(luò)設(shè)備的接口名稱。

MTU表示最大傳輸單元,單位字節(jié)。

RX-OK/TX-OK表示已經(jīng)準(zhǔn)確無誤的接收/發(fā)送了多少數(shù)據(jù)包。

RX-ERR/TX-ERR表示接收/發(fā)送數(shù)據(jù)包時產(chǎn)生了多少錯誤。

RX-DRP/TX-DRP表示接收/發(fā)送數(shù)據(jù)包時丟棄了多少數(shù)據(jù)包。

RX-OVR/TX-OVR表示由于誤差而遺失了多少數(shù)據(jù)包。

Flg表示接口標(biāo)記,其中:

L:表示該接口是個回環(huán)設(shè)備。

B:表示設(shè)置了廣播地址。

M:表示接收所有數(shù)據(jù)包。

R:表示接口正在運行。

U:表示接口處于活動狀態(tài)。

O:表示在該接口上禁用arp。

P:表示一個點到點的連接。

正常情況下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都應(yīng)該為0,如果這幾個選項的值不為0,并且很大,那么網(wǎng)絡(luò)質(zhì)量肯定有問題,網(wǎng)絡(luò)傳輸性能也一定會下降。

當(dāng)網(wǎng)絡(luò)傳輸存在問題是,可以檢測網(wǎng)卡設(shè)備是否存在故障,如果可能,可以升級為千兆網(wǎng)卡或者光纖網(wǎng)絡(luò),還可以檢查網(wǎng)絡(luò)部署環(huán)境是否合理。

4.3 通過netstat –r組合檢測系統(tǒng)的路由表信息

在網(wǎng)絡(luò)不通,或者網(wǎng)絡(luò)異常時,首先想到的就是檢查系統(tǒng)的路由表信息,“netstat –r”的輸出結(jié)果與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

關(guān)于輸出中每項的具體含義,已經(jīng)在前面章節(jié)進行過詳細介紹,這里不再多講,這里我們重點關(guān)注的是default行對應(yīng)的值,default項表示系統(tǒng)的默認路由,對應(yīng)的網(wǎng)絡(luò)接口為eth0。

4.4 通過sar –n組合顯示系統(tǒng)的網(wǎng)絡(luò)運行狀態(tài)

sar提供四種不同的選項來顯示網(wǎng)絡(luò)統(tǒng)計信息,通過“-n”選項可以指定4個不同類型的開關(guān):DEV、EDEV、SOCK和FULL。DEV顯示網(wǎng)絡(luò)接口信息,EDEV顯示關(guān)于網(wǎng)絡(luò)錯誤的統(tǒng)計數(shù)據(jù),SOCK顯示套接字信息,FULL顯示所有三個開關(guān)。請看下面的一個輸出:

[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表示網(wǎng)絡(luò)接口設(shè)備。

rxpck/s表示每秒鐘接收的數(shù)據(jù)包大小。

txpck/s表示每秒鐘發(fā)送的數(shù)據(jù)包大小。

rxkB/s表示每秒鐘接收的字節(jié)數(shù)。

txkB/s表示每秒鐘發(fā)送的字節(jié)數(shù)。

rxcmp/s表示每秒鐘接收的壓縮數(shù)據(jù)包。

txcmp/s表示每秒鐘發(fā)送的壓縮數(shù)據(jù)包。

rxmcst/s表示每秒鐘接收的多播數(shù)據(jù)包。

通過“sar –n”的輸出,可以清楚的顯示網(wǎng)絡(luò)接口發(fā)送、接收數(shù)據(jù)的統(tǒng)計信息。此外還可以通過“sar -n EDEV 2 3”來統(tǒng)計網(wǎng)絡(luò)錯誤信息等。

4.5 小結(jié)

本節(jié)通過幾個常用的網(wǎng)絡(luò)命令介紹了對網(wǎng)絡(luò)性能的評估,事實上,網(wǎng)絡(luò)問題是簡單而且容易處理的,只要我們根據(jù)上面給出的命令,一般都能迅速定位問題。解決問題的方法一般是增加網(wǎng)絡(luò)帶寬,或者優(yōu)化網(wǎng)絡(luò)部署環(huán)境。

除了上面介紹的幾個命令外,排查網(wǎng)絡(luò)問題經(jīng)常用到的命令還有traceroute,主要用于跟蹤數(shù)據(jù)包的傳輸路徑,還有nslookup命令,主要用于判斷DNS解析信息

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的linux需要检测的系统资源不足,细说Linux 系统优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。