2.1.3 系統性能分析工具
1.經常使用系統命令
Vmstat、sar、iostat、netstat、free、ps、top等
2.經常使用組合方式
-
vmstat、sar、iostat檢測是不是CPU瓶頸
-
free、vmstat檢測是不是內存瓶頸
-
iostat檢測是不是磁盤I/O瓶頸
-
netstat檢測是不是網絡帶寬瓶頸
2.1.4 Linux性能評估與優化
系統總體性能評估(uptime命令)uptime
16:38:00 up 118 days, 3:01, 5 users,load average: 1.22, 1.02, 0.91
注意:
-
load average三值大小通常不能大於系統CPU的個數。
系統有8個CPU,如load average三值長期大於8,說明CPU很繁忙,負載很高,可能會影響系統性能。
-
但偶爾大於8,通常不會影響系統性能。
-
如load average輸出值小於CPU個數,則表示CPU有空閒時間片,好比本例中的輸出,CPU是很是空閒的
2.2.1 CPU性能評估
1.利用vmstat命令監控系統CPU
顯示系統各類資源之間相關性能簡要信息,主要看CPU負載狀況。
下面是vmstat命令在某個系統的輸出結果:
-
[root@node1 ~] #vmstat 2 3
-
-
procs
-
———–memory———- —swap– —–io—- – system– —–cpu——
-
-
r b swpd freebuff cache si so bi bo incs us sy idwa 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、或者內存交換等。
CPU
us
用戶進程消耗的CPU 時間百分比。
us的值比較高時,說明用戶進程消耗的cpu時間多,可是若是長期大於50%,就須要考慮優化程序或算法。
sy
內核進程消耗的CPU時間百分比。Sy的值較高時,說明內核消耗的CPU資源不少。
根據經驗,us+sy的參考值爲80%,若是us+sy大於 80%說明可能存在CPU資源不足。
2.利用sar命令監控系統CPU
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 90.08 0.00 0.13 0.16 0.00 9.63
-
-
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總體利用率不高,而應用緩慢的現象?
在一個多CPU的系統中,若是程序使用了單線程,會出現這麼一個現象,CPU的總體使用率不高,可是系統應用卻響應緩慢,這多是因爲程序使用單線程的緣由,單線程只使用一個CPU,致使這個CPU佔用率爲100%,沒法處理其它請求,而其它的CPU卻閒置,這就致使了總體CPU使用率不高,而應用緩慢現象的發生。
2.3.1 內存性能評估
1.利用free指令監控內存
free是監控Linux內存使用情況最經常使用的指令,看下面的一個輸出:
-
[root@webserver ~] # free -m
-
-
total
-
used freeshared
-
buffers cached
-
-
Mem:
-
8111 7185 926 0 243 6299
-
-
- /+
-
buffers/cache:
-
643 7468
-
-
Swap:
-
8189 0 8189
經驗公式:
-
應用程序可用內存/系統物理內存>70%,表示系統內存資源很是充足,不影響系統性能;
-
應用程序可用內存/系統物理內存<20%,表示系統內存資源緊缺,須要增長系統內存;
-
20%<應用程序可用內存/系統物理內存<70%,表示系統內存資源基本能知足應用需求,暫時不影響系統性能
2.利用vmstat命令監控內存
-
[root@node1
-
~] #
-
vmstat 2 3
-
-
procs
-
———–memory———- —swap– —–io—- – system– —–cpu——
-
-
r b swpd freebuff cache si so bi bo incs us sy idwa 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
memory
-
swpd --切換到內存交換區的內存數量(k爲單位)。如swpd值偶爾非0,不影響系統性能
-
free --當前空閒的物理內存數量(k爲單位)
-
buff --buffers cache的內存數量,通常對塊設備的讀寫才須要緩衝
-
cache--page cached的內存數量
通常做爲文件系統cached,頻繁訪問的文件都會被cached,如cache值較大,說明cached的文件數較多,若是此時IO中bi比較小,說明文件系統效率比較好。
swap
-
si --由磁盤調入內存,也就是內存進入內存交換區的數量。
-
so --由內存調入磁盤,也就是內存交換區進入內存的數量。
si、so的值長期不爲0,表示系統內存不足。需增長系統內存。
2.4.1磁盤I/O性能評估
1.磁盤存儲基礎
頻繁訪問的文件或數據儘量用內存讀寫代替直接磁盤I/O,效率高千倍。
將常常進行讀寫的文件與長期不變的文件獨立出來,分別放置到不一樣的磁盤設備上。
對於寫操做頻繁的數據,能夠考慮使用裸設備代替文件系統。
裸設備優勢:
-
數據可直接讀寫,不需通過操做系統級緩存,節省內存資源,避免內存資源爭用;
-
避免文件系統級維護開銷,如文件系統需維護超級塊、I-node等;
-
避免了操做系統 cache預讀功能,減小了I/O請求
使用裸設備的缺點是:
數據管理、空間管理不靈活,須要很專業的人來操做。
2.利用iostat評估磁盤性能
-
[root@webserver ~] # iostat -d 2 3
-
-
Linux
-
2.6.9-42.ELsmp (webserver) 12/01/2008_i686_
-
( 8 CPU)
-
-
-
-
Device:
-
tps Blk_read/sBlk_wrtn/sBlk_read
-
Blk_wrtn
-
-
sda 1.87 2.58 114.12 6479462 286537372
-
-
-
-
Device:
-
tps Blk_read/sBlk_wrtn/sBlk_read
-
Blk_wrtn
-
-
sda
-
0.00 0.00 0.00 0 0
-
-
-
Device:
-
tps Blk_read/sBlk_wrtn/sBlk_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值很大,表示磁盤直接讀操做不少,可將讀取的數據放入內存
規則遵循:
長期的、超大的數據讀寫,確定是不正常的,這種狀況必定會影響系統性能。
3.利用sar評估磁盤性能
經過「sar –d」組合,能夠對系統的磁盤IO作一個基本的統計,請看下面的一個輸出:
-
[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/swr_sec/savgrq-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/swr_sec/savgrq-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/swr_sec/savgrq-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/swr_sec/savgrq-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
參數含義:
-
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系統已經滿負荷工做,該磁盤可能存在瓶頸。
可優化程序或者 經過更換 更高、更快的磁盤。
2.5.1. 網絡性能評估
-
(1)經過ping命令檢測網絡的連通性
-
(2)經過netstat –i組合檢測網絡接口情況
-
(3)經過netstat –r組合檢測系統的路由表信息
-
(4)經過sar –n組合顯示系統的網絡運行狀態
三 Linux服務器性能調優
1.爲磁盤I/O調整Linux內核電梯算法
選擇文件系統後,該算法能夠平衡低延遲需求,收集足夠數據,有效組織對磁盤讀寫請求。
2.禁用沒必要要的守護進程,節省內存和CPU資源
-
許多守護進程或服務一般非必需,消耗寶貴內存和CPU時間。將服務器置於險地。
-
禁用可加快啓動時間,釋放內存。
-
-
減小CPU要處理的進程數
一些應被禁用的Linux守護進程,默認自動運行:
序號 守護進程 描述
1 Apmd 高級電源管理守護進程
2 Nfslock 用於NFS文件鎖定
3 Isdn ISDN Moderm支持
4 Autofs 在後臺自動掛載文件系統(如自動掛載CD-ROM)
5 Sendmail 郵件傳輸代理
6 Xfs X Window的字體服務器
3.關掉GUI
四、清理不須要的模塊或功能
服務器軟件包中太多被啓動的功能或模塊其實是不須要的(如Apache中的許多功能模塊),禁用掉有助於提升系統內存可用量,騰出資源給那些真正須要的軟件,讓它們運行得更快。
五、禁用控制面板
在Linux中,有許多流行的控制面板,如Cpanel,Plesk,Webmin和phpMyAdmin等,禁用釋放出大約120MB內存,內存使用量大約降低30-40%。
六、改善Linux Exim服務器性能
使用DNS緩存守護進程,可下降解析DNS記錄須要的帶寬和CPU時間,DNS緩存經過消除每次都從根節點開始查找DNS記錄的需求,從而改善網絡性能。
Djbdns是一個很是強大的DNS服務器,它具備DNS緩存功能,Djbdns比BIND DNS服務器更安全,性能更好,能夠直接經過http://cr.yp.to/下載,或經過Red Hat提供的軟件包得到。
七、使用AES256加強gpg文件加密安全
爲提升備份文件或敏感信息安全,許多Linux系統管理員都使用gpg進行加密,在使用gpg時,最好指定gpg使用AES256加密算法,AES256使用256位密鑰,它是一個開放的加密算法,美國國家安全局(NSA)使用它保護絕密信息。
八、遠程備份服務安全
安全是選擇遠程備份服務最重要的因素,大多數系統管理員都懼怕兩件事:(黑客)能夠刪除備份文件,不能從備份恢復系統。
爲了保證備份文件100%的安全,備份服務公司提供遠程備份服務器,使用scp腳本或RSYNC經過SSH傳輸數據,這樣,沒有人能夠直接進入和訪問遠程系統,所以,也沒有人能夠從備份服務刪除數據。在選擇遠程備份服務提供商時,最好從多個方面瞭解其服務強壯性,若是能夠,能夠親自測試一下。
九、更新默認內核參數設置
爲了順利和成功運行企業應用程序,如數據庫服務器,可能須要更新一些默認的內核參數設置,例如,2.4.x系列內核消息隊列參數msgmni有一個默認值(例如,共享內存,或shmmax在Red Hat系統上默認只有33554432字節),它只容許有限的數據庫併發鏈接,下面爲數據庫服務器更好地運行提供了一些建議值(來自IBM DB2支持網站):
kernel.shmmax=268435456 (32位)
kernel.shmmax=1073741824 (64位)
kernel.msgmni=1024
fs.file-max=8192
kernel.sem=」250 32000 32 1024″
十、優化TCP
優化TCP協議有助於提升網絡吞吐量,跨廣域網的通訊使用的帶寬越大,延遲時間越長時,建議使用越大的TCP Linux大小,以提升數據傳輸速率,TCP Linux大小決定了發送主機在沒有收到數據傳輸確認時,能夠向接收主機發送多少數據。
十一、選擇正確的文件系統
使用ext4文件系統取代ext3
● Ext4是ext3文件系統的加強版,擴展了存儲限制
●具備日誌功能,保證高水平的數據完整性(在非正常關閉事件中)
●非正常關閉和重啓時,它不須要檢查磁盤(這是一個很是耗時的動做)
●更快的寫入速度,ext4日誌優化了硬盤磁頭動做
十二、使用noatime文件系統掛載選項
在文件系統啓動配置文件fstab中使用noatime選項,若是使用了外部存儲,這個掛載選項能夠有效改善性能。
1三、調整Linux文件描述符限制
Linux限制了任何進程能夠打開的文件描述符數量,默認限制是每進程1024,這些限制可能會阻礙基準測試客戶端(如httperf和apachebench)和Web服務器自己得到最佳性能,Apache每一個鏈接使用一個進程,所以不會受到影響,但單進程Web服務器,如Zeus是每鏈接使用一個文件描述符,所以很容易受默認限制的影響。
打開文件限制是一個能夠用ulimit命令調整的限制,ulimit -aS命令顯示當前的限制,ulimit -aH命令顯示硬限制(在未調整/proc中的內核參數前,你不能增長限制)。
Linux第三方應用程序性能技巧
對於運行在Linux上的第三方應用程序,同樣有許多性能優化技巧,這些技巧能夠幫助你提升Linux服務器的性能,下降運行成本。
1四、正確配置MySQL
爲了給MySQL分配更多的內存,可設置MySQL緩存大小,要是MySQL服務器實例使用了更多內存,就減小緩存大小,若是MySQL在請求增多時停滯不動,就增長MySQL緩存。
1五、正確配置Apache
檢查Apache使用了多少內存,再調整StartServers和MinSpareServers參數,以釋放更多的內存,將有助於你節省30-40%的內存。
1六、分析Linux服務器性能
提升系統效率最好的辦法是找出致使總體速度降低的瓶頸並解決掉,下面是找出系統關鍵瓶頸的一些基本技巧:
● 當大型應用程序,如OpenOffice和Firefox同時運行時,計算機可能會開始變慢,內存不足的出現概率更高。
● 若是啓動時真的很慢,多是應用程序初次啓動須要較長的加載時間,一旦啓動好後運行就正常了,不然極可能是硬盤太慢了。
●CPU負載持續很高,內存也夠用,但CPU利用率很低,可使用CPU負載分析工具監控負載時間。
1七、學習5個Linux性能命令
使用幾個命令就能夠管理Linux系統的性能了,下面列出了5個最經常使用的Linux性能命令,包括
top、vmstat、iostat、free和sar,它們有助於系統管理員快速解決性能問題。
(1)top
當前內核服務的任務,還顯示許多主機狀態的統計數據,默認狀況下,它每隔5秒自動更新一次。
如:當前正常運行時間,系統負載,進程數量和內存使用率,
此外,這個命令也顯示了那些使用最多CPU時間的進程(包括每一個進程的各類信息,如運行用戶,執行的命令等)。
(2)vmstat
Vmstat命令提供當前CPU、IO、進程和內存使用率的快照,它和top命令相似,自動更新數據,如:
$ vmstat 10
(3)iostat
Iostat提供三個報告:CPU利用率、設備利用率和網絡文件系統利用率,使用-c,-d和-h參數能夠分別獨立顯示這三個報告。
(4)free
顯示主內存和交換空間內存統計數據,指定-t參數顯示總內存,指定-b參數按字節爲單位,使用-m則以兆爲單位,默認狀況下千字節爲單位。
Free命令也可使用-s參數加一個延遲時間(單位:秒)連續運行,如:
$ free -s 5
(5)sar
收集,查看和記錄性能數據,這個命令比前面幾個命令歷史更悠久,它能夠收集和顯示較長週期的數據。
其它
下面是一些歸類爲其它的性能技巧:
1八、將日誌文件轉移到內存中
當一臺機器處於運行中時,最好是將系統日誌放在內存中,當系統關閉時再將其複製到硬盤,當你運行一臺開啓了syslog功能的筆記本電腦或移動設備時,ramlog能夠幫助你提升系統電池或移動設備閃存驅動器的壽命,使用ramlog的一個好處是,不用再擔憂某個守護進程每隔30秒向syslog發送一條消息,放在之前,硬盤必須隨時保持運轉,這樣對硬盤和電池都很差。
1九、先打包,後寫入
在內存中劃分出固定大小的空間保存日誌文件,這意味着筆記本電腦硬盤不用一直保持運轉,只有當某個守護進程須要寫入日誌時才運轉,注意ramlog使用的內存空間大小是固定的,不然系統內存會很快被用光,若是筆記本使用固態硬盤,能夠分配50-80MB內存給ramlog使用,ramlog能夠減小許多寫入週期,極大地提升固態硬盤的使用壽命。
20、通常調優技巧
儘量使用靜態內容替代動態內容,若是你在生整天氣預告,或其它每隔1小時就必須更新的數據,最好是寫一個程序,每隔1小時生成一個靜態的文件,而不是讓用戶運行一個CGI動態地生成報告。
爲動態應用程序選擇最快最合適的API,CGI可能最容易編程,但它會爲每一個請求產生一個進程,一般,這是一個成本很高,且沒必要要的過程,FastCGI是更好的選擇,和Apache的mod_perl同樣,均可以極大地提升應用程序的性能。