一、網(wǎng)絡(luò)問(wèn)題
1、臨時(shí)性
檢查:ping, mtr,dig,dig+trace 等命令,檢查網(wǎng)絡(luò)狀況,DNS等
解決:聯(lián)系機(jī)房或視具體情況而定
eg:http://www.tjdsmy.cn/ 查看各地響應(yīng)時(shí)間
2、網(wǎng)絡(luò)不同或距離太遠(yuǎn)
檢查:客戶端和機(jī)房所在網(wǎng)絡(luò)情況
解決:雙線機(jī)房或分布式部署,動(dòng)態(tài)DNS,需要考慮成本
3、資源加載慢
檢查:chrome控制臺(tái)
解決:CDN,合并請(qǐng)求,壓縮頁(yè)面代碼,多域名請(qǐng)求(http協(xié)議中有對(duì)瀏覽器并發(fā)請(qǐng)求連接數(shù)的限制,IE是10,火狐 chrome是6)等
二、前端問(wèn)題
1、瀏覽器太爛
2、頁(yè)面設(shè)計(jì)不佳
檢查:瀏覽器解析時(shí)間,是否DOM節(jié)點(diǎn)過(guò)多,JS有問(wèn)題等
解決:優(yōu)化頁(yè)面代碼
三、服務(wù)端問(wèn)題
1、服務(wù)器狀態(tài)
檢查:負(fù)載,CPU, 網(wǎng)絡(luò),內(nèi)存,磁盤(pán)空間等使用情況,日志切割
如果單臺(tái)服務(wù)器性能受限,考慮調(diào)整為分布式架構(gòu),如nginx轉(zhuǎn)發(fā),DB分庫(kù)分表等
2、PHP響應(yīng)慢
用Xdebug,Webgrind等調(diào)試工具調(diào)試源碼
檢查webserver日志中的響應(yīng)時(shí)間
如果服務(wù)器整體負(fù)載不高,但PHP的數(shù)據(jù)返回時(shí)間過(guò)長(zhǎng),在PHP代碼中分段輸出處理時(shí)間
如果是高訪問(wèn)量的在線調(diào)試,一般選取一定比例記錄日志,防止日志過(guò)多帶來(lái)的額外系統(tǒng)開(kāi)銷(xiāo)
調(diào)試指導(dǎo)思想:逐步縮小范圍,定位、優(yōu)化
平常開(kāi)發(fā)原則:
編寫(xiě)代碼注重效率,盡可能占用更少的資源
緩存復(fù)雜和耗時(shí)運(yùn)算的結(jié)果
用apc或者xcache等緩存PHP的opcode
能異步處理的任務(wù)不要馬上處理,如發(fā)郵件
依據(jù)資源情況對(duì)FastCGI配置合適的參數(shù)
負(fù)載均衡器設(shè)好閥值,不要無(wú)限制的給后端壓力
接口api設(shè)置過(guò)期時(shí)間,1秒內(nèi)等
3、DB響應(yīng)慢
讀取慢
檢查:慢查詢?nèi)罩荆?/span>
show processlist 查看當(dāng)前DB狀態(tài),看哪些請(qǐng)求停留較多
top查看mysql進(jìn)程的開(kāi)銷(xiāo)
代碼中記錄SQL和執(zhí)行時(shí)間
解決:
手動(dòng)執(zhí)行可疑SQL(注意排除query cache的影響),用explain,profile等工具?析SQL性能
再考慮是否優(yōu)化索引,或者分庫(kù)分表,或者增加緩存
寫(xiě)入慢
檢查:除讀取慢的檢查方法外,還有
iostat 檢查磁盤(pán)IO
查看mysql binlog的寫(xiě)入速率
解決:增加緩存,分庫(kù)分表,優(yōu)化索引,從業(yè)務(wù)邏輯上考慮減少DB操作,合并寫(xiě)入
4、內(nèi)部網(wǎng)絡(luò)消耗太大
5、其他
被攻擊,webserver進(jìn)程數(shù)受限,甚至內(nèi)網(wǎng)流量過(guò)高等原因,都有可能導(dǎo)致訪問(wèn)緩慢,具體情況具體分析