一次網站分析與解決的經歷,最後結果雖然很簡單可是過程比較曲折.記錄一下:
今天訪問網站首頁十分緩慢,頁面半天都加載不出來.因而上服務器看看狀況,經過top看到load和cpu以及磁盤io都很低,只能祭出神器dstat:
dstat
查看到流量很大,咱們使用的是阿里雲的ecs服務器,帶寬20m左右,能夠看到流量已經達到了帶寬上限.
因而立刻想到查看nginx服務器日誌,可是日誌龐大,絕大部分是jpg,js,css等靜態資源,很難實際分析到問題.
接下來去百度搜索,如何查看服務器上的流量分配.很遺憾並無直接的答案,可是看到一個工具叫iftop,立刻apt-get下載之
iftop工具能夠實時的列出網站當前的流量狀況,主要以ip分隔.
上方的列表=>表示出流量,<=表示入流量.
底部三行是彙總:
第一列顯示累計的出流量(TX),入流量(RX),總共(TOTAL)
第二列顯示峯值帶寬
最後一列顯示平均的統計結果,分別是3s,5s,15s的統計結果,與top命令的load相似吧.
iftop
能夠看到存在少數ip正在佔用大量的帶寬,這種狀況能夠想象到是正在下載大文件了,可是並不知道是什麼文件. 但知道方向事情就好辦了,仍是經過nginx日誌,分析其中的一個大流量ip正在幹什麼...執行
> cat /var/log/nginx/access.log | grep 223.144.191.227 > ~/temp2.log
再來看這個時間點有什麼可疑的下載.結果發現一個zip包,這個zip包是咱們的app的語音包,有50m以上,估計頗有多是它的問題了!
執行
> cat /var/log/nginx/access.log | grep /word_wg_voc.zip |more 部分結果以下:
能夠看到是app的語音包下載出了問題: 連接後面的 200 後面的數字表明的是發送的字節數,而這裏不少都不同,說明是下載不完整. 這也是帶寬不足形成的後果...
知道了問題後就ok了,解決辦法是:先臨時提升帶寬,同時配置cdn(由於cdn配置後須要把app從新發一個版本才能用上,有個幾天的延遲,iphone app審覈你懂得).
順便打個廣告,app叫知米背單詞,你們有空能夠來學學英語 :)