一般問題出現(xiàn)珍手,首先最重要的是定位問題的影響范圍。以制定不同的解決方案辞做。
流程
- 首先:估計錯誤影響范圍
當問題出現(xiàn)琳要,第一反應是估計影響范圍。如當有用戶反饋頁面白屏秤茅,打不開時稚补。需第一時間確認影響范圍。具體操作流程如下:
- 頁面pv數(shù)據(jù)嫂伞,接口調用數(shù)據(jù)或者其他可以判斷影響范圍的數(shù)據(jù)有沒有出現(xiàn)斷崖式的下跌
- 根據(jù)是否斷崖下跌制定不同的方案
pass: 當出現(xiàn)斷崖下跌孔厉,整個服務不可用時,啟動緊急方案帖努,如切換到臨時頁面(404或其他頁面)撰豺。否則,查找問題拼余,緊急排錯
- 然后:查看服務器各種指標
當問題是局部發(fā)生的時候污桦。則需進行排查。首先查看服務器各個集群的狀態(tài):
linux服務器的運行情況(機房斷電匙监,斷網(wǎng))凡橱,負載(cpu,內存亭姥,硬盤等)稼钩,網(wǎng)絡(網(wǎng)絡是否阻塞或斷網(wǎng))
各支撐集群的狀態(tài),MySQL集群機器的狀態(tài)(是否有實例斷開达罗、當機坝撑,負載過高,主從延遲的情況)粮揉,redis集群(redis各個機器的運行情況巡李,是否有redis崩潰等),或者其他支撐服務的運行狀態(tài)(memcache扶认,elasticsearch侨拦,mongo等)
- 其次:排查日志
日志的排查不能是漫無目的的,需要根據(jù)問題的情況及對業(yè)務的了解辐宾,先后的去排查可能相關的日志狱从。
PHP錯誤日志
apache日志
nginx日志
mysql的慢查詢日志
- 最后
問題一般在如上的流程中都能定位出來。如果定位不出來:
==讓自己冷靜下來叠纹,停下來一分鐘矫夯,想一想問題,千萬不要慌亂吊洼,并在沒有思路的情況下操作训貌,避免二次事故==
試試以下方案:
1、根據(jù)異常的狀態(tài)進行合理的推斷和定位問題(一般靠經(jīng)驗和對業(yè)務的熟悉程度)冒窍,
具體的操作一般也是依據(jù)如上的流程
2递沪、聯(lián)系最近的系統(tǒng)操作進行判斷(如機器切換,版本升級综液,代碼發(fā)布款慨,網(wǎng)絡切換),來定位問題
pass: 一般的線上問題排查谬莹,如果是簡單的問題檩奠,直接可以定位到的桩了,則不需要如上的流程。
- 解決問題
當影響范圍或這錯誤已經(jīng)找到或者沒找到的情況下埠戳。需要在最短的時間內恢復系統(tǒng)(不一定是100%恢復井誉,但要保持基本可用),如:
整站崩潰整胃,要緊急切換到備用的404頁面
局部功能導致的系統(tǒng)異常颗圣,可直接下掉該功能,保持基本功能異常
如等級系統(tǒng)異常導致的整站異常屁使,則可下掉等級系統(tǒng)在岂,所有用戶等級全部默認1級,以保持系統(tǒng)基本功能可用
問題解決的時間決定了當前的處理方案的不同蛮寂。需根據(jù)業(yè)務進行討論蔽午。如時間長,則需要怎么解決用戶訪問酬蹋,用戶應該看什么祠丝,需要根據(jù)自己的業(yè)務進行討論。 時間短除嘹,在這么短的時間內用戶應該看什么写半,也是一樣的道理
- 延伸
從上面的處理過程會得到一個提醒:
==線上系統(tǒng)的備用方案非常重要,系統(tǒng)需要有演戲尉咕,有緊急情況下的備用方案==
工具推薦
上面的排查過程叠蝇,需要在一系列工具的配合下才能準確,快速的定位問題年缎,以下列一下可能需要用的工具悔捶。
==linux命令是最好用的工具==
pass: 以下工具是以服務是以多臺機器(服務集群)的情況下推薦使用的,如果是單機或者2单芜,3太機器蜕该,則直接使用linux的命令行工具即可。
- 訪問情況分析
業(yè)務的訪問情況分析洲鸠,如pv堂淡,可以用百度統(tǒng)計等第三方統(tǒng)計平臺(對于上述的情況,這種第三方統(tǒng)計平臺是足夠使用的)扒腕。
接口的訪問情況绢淀,可能看起來比較麻煩。一般接口的訪問情況瘾腰,可以根據(jù)入口服務器(如nginx或apache)的訪問日志來做一個簡單的估計和查看皆的。但是如果是分布式的機器的情況下,就比較麻煩蹋盆。建議搭建ELK日志平臺费薄,通過對日志的聚合統(tǒng)計就可以做到接口訪問情況的分析硝全。
- 運維工具
zabbix:是一個基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡監(jiān)視功能的企業(yè)級的開源解決方案±懵眨可以監(jiān)控到各種服務器信息伟众。
當然目前運維屆有各種監(jiān)控工具,如單獨監(jiān)控mysql集群的工具拌倍,redis的集群監(jiān)控工具等都是可以用的。各個公司需要根據(jù)自己的情況噪径,選用不同的工具柱恤。畢竟如果只需要監(jiān)控mysql,那用zabbix就太重了找爱。
目的是一致的:快速梗顺,簡便的看到服務的運行信息,并具有報警功能
- 日志工具
業(yè)界目前比較流行的有ELK Stack车摄。用于一站式的日志采集寺谤,存儲,查看和分析吮播”淦ǎ可以集中,方便的觀察到各臺服務器的日志情況意狠,又不需要每個人都開通線上機器的權限粟关,也方便日志的查詢和搜索
擴展
在一般情況下(業(yè)務系統(tǒng)較簡單,機器不多)环戈。linux的命令是最方便快捷的方法闷板。配合shell的sed或awt語法,可以做很多事情院塞。
下面列一下一些常用的命令或工具:
一遮晚、web工具
1、xdebug拦止、xhprof县遣;
2、PHP慢日志汹族;
3艺玲、查看php-fpm、httpd進程數(shù)鞠抑,必要時使用strace饭聚、lsof。
二搁拙、Mysql工具
1秒梳、mysqlsla:配合mysql的全日志法绵,在測試環(huán)境中,可以準確地分析每個流程執(zhí)行sql語句酪碘,排查索引朋譬、業(yè)務邏輯等問題;
2兴垦、mk-query-digest+tcpdump:實時監(jiān)測數(shù)據(jù)庫端口(比如3306)徙赢,截取正在sql語句。
三探越、linux自帶的命令
1狡赐、top:這個基本可以看出資源使用情況,可第一步先判定問題是“CPU密集型”或者“IO密集型”钦幔;
2枕屉、iostat:分析磁盤IO
3、vmstat:可分析內存的使用情況
四鲤氢、各類日志幫助分析問題
1搀擂、web日志:很多問題可以在錯誤日志中找到提示,非常有用
2卷玉、mysql日志:mysql的錯誤日志哨颂、慢日志
3、php慢日志:也有一定的幫助相种,我碰到較多的是連接DB的時候慢了咆蒿,慢日志不用時必須關閉
``