網(wǎng)站優(yōu)化之系統(tǒng)瓶頸查找
網(wǎng)站響應(yīng)慢了,用戶開始埋怨,老大安排你去優(yōu)化,可是優(yōu)化如何開始呢。
優(yōu)化開始前一定要理清思路,問自己,網(wǎng)站的瓶頸在哪里。
系統(tǒng)的瓶頸在何方呢?如果你的系統(tǒng)有完善的監(jiān)控分析系統(tǒng)的話,可以從統(tǒng)計(jì)數(shù)據(jù)和圖形上
看到大致的系統(tǒng)瓶頸所在,但是如果你的系統(tǒng)沒有這些數(shù)據(jù),你又如何來確定系統(tǒng)的瓶頸呢。
按照一般的思路,我們對(duì)系統(tǒng)進(jìn)行邏輯功能的劃分,如靜態(tài)服務(wù)器,動(dòng)態(tài)服務(wù)器,
數(shù)據(jù)庫服務(wù)器,業(yè)務(wù)邏輯服務(wù)器。分別針對(duì)對(duì)這些服務(wù)器的帶寬、內(nèi)存使用、cpu使用率、磁盤使用情況進(jìn)行
分析,如對(duì)于動(dòng)態(tài)服務(wù)器而言,其cpu的使用率一般情況下是其瓶頸;而對(duì)于靜態(tài)文件服務(wù)器,
由于其邏輯簡單,但需要傳輸大量的文件,其出口的帶寬很有可能是其瓶頸;對(duì)于數(shù)據(jù)庫服務(wù)器,
cpu和磁盤都有可能是瓶頸。
我們可以通過如下幾個(gè)方面來進(jìn)行查找和排除:
1 網(wǎng)絡(luò)帶寬
帶寬可能是最直接的一個(gè)瓶頸,可以很容易的估計(jì)到。
假如運(yùn)營商給你提供了10M的帶寬,注意帶寬的單位是bit,
如果你的一個(gè)頁面的大小是10K字節(jié),那么一秒鐘的最多的并發(fā)量這樣計(jì)算:
10*1024/8/10=128
如果每秒并發(fā)超過這個(gè)數(shù)字,你的帶寬就無法接受了。
或者通過netstat命令來觀察一下你的網(wǎng)絡(luò)收發(fā)包的情況,使用netstat -s來觀察一些統(tǒng)計(jì)
的數(shù)據(jù),如果發(fā)現(xiàn)等待包隊(duì)列里總是有大量的包待處理,一方面說明可能你的程序有問題,
另一方面說明可能你的并發(fā)量太大,系統(tǒng)已經(jīng)處理不過來了,可能已經(jīng)開始丟包了。
按照這個(gè)兩個(gè)思路去檢查吧。
2 CPU
如果帶寬不是問題,又有這么大的并發(fā)量,下一個(gè)很容易是問題的就是你的cpu了。
如果你的網(wǎng)站有大量的動(dòng)態(tài)請(qǐng)求,如php操作數(shù)據(jù)庫后再返回,
cgi代碼邏輯里有大量的排序等耗費(fèi)cpu的操作,或者是你的cgi程序
寫的不好,會(huì)死循環(huán),這時(shí)你的cpu就將成為瓶頸。
在linux上試試top命令,看看你的機(jī)子的負(fù)載,通過最右上角的1分鐘、5、15分鐘采樣的平均負(fù)載可以
看到你的機(jī)子在一段時(shí)間內(nèi)的一個(gè)負(fù)載情況,如果過去15分鐘你的機(jī)子的負(fù)載大于你的cpu的數(shù)目*5,
說明你的機(jī)子很繁忙了,很多進(jìn)程都需要等待處理了。
或者vmstat -n 1命令,看看你的cpu idle的時(shí)間有多少,等待處理的進(jìn)程數(shù)量有多少,磁盤塊的讀寫有多少。
如果cpu idle的時(shí)間很少,或者等待處理的進(jìn)程數(shù)量很多,說明你的系統(tǒng)比較繁忙。
3 磁盤操作
如果你的帶寬很大,cpu比較的空閑,接下來的瓶頸很可能是磁盤的io操作了。
從內(nèi)存讀取數(shù)據(jù)是相當(dāng)快的,但是從硬盤讀取數(shù)據(jù)是內(nèi)存讀取數(shù)據(jù)的50到100倍的時(shí)間,
使用iostat -dx查看一下你的硬盤操作的情況,如果有大量的block阻塞著等待寫入到硬盤,
你需要檢查一下你的代碼,看看是否有大量的日志操作,或者寫文件的操作阻塞住了。
4 業(yè)務(wù)邏輯服務(wù)器響應(yīng)慢
如果上述都o(jì)k,而且你的cgi又連接到其它的業(yè)務(wù)邏輯服務(wù)器請(qǐng)求數(shù)據(jù)的情況,你需要檢查
你與業(yè)務(wù)邏輯服務(wù)器之間的連接是否正常,帶寬是否夠用,你的業(yè)務(wù)邏輯服務(wù)器的性能如何。
5 內(nèi)存不夠用
對(duì)于一些大容量緩存的業(yè)務(wù)服務(wù)器,如果緩存過多的內(nèi)容,淘汰策略不好的話,會(huì)導(dǎo)致使用掉過多的內(nèi)存,
從而引起操作系統(tǒng)進(jìn)行大量的swap交換,進(jìn)而影響到系統(tǒng)的性能,成為瓶頸。
通過ipcs -a觀看系統(tǒng)的使用的共享內(nèi)存的情況,如果共享內(nèi)存使用太多的話,考慮較少一點(diǎn)共享內(nèi)存的大小。
使用free來來觀察系統(tǒng)的內(nèi)存使用情況,如果發(fā)現(xiàn)空閑的內(nèi)存空間少,使用top命令,然后ctl+M看看
那些進(jìn)程占用了大量的內(nèi)存,適當(dāng)關(guān)掉一些進(jìn)程,部署在其它的服務(wù)器上。
更多網(wǎng)站優(yōu)化參考:網(wǎng)站優(yōu)化系列
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇