第13篇 先定位,再分析
嗯,最近事情比較多,還有些累,主要還是有些懶。待我調整一下,還是要保證一周兩到三篇文章,請大家提醒監督。
正文開始
首先聲明一下,"先定位,再分析"這一思想並非我的原創,來源於原中國安防科技有限公司武漢研發中心的老大胡志雄,至於更深的淵源無從考證.
當時我大概工作了三年左右的樣子,也是剛入職不久,即便在以後好幾年裡,也經常對同事,特別新入職的同事講這個思想.這個思想我是十分認同的,而且在其後若干年裡直到現在仍然是我解決系統問題時遵守的重要法則之一.
"先定位,再分析"極端一點講,當一個系統中出現任何問題,不要想其為什麼會出現,也不要講我們使用什麼方法什麼理論保證了系統的穩定運行,首先要做的第一件事情是去重現它,而重現問題也是定位的一部分,要明確知道問題會在什麼時機,多長時間,什麼情況下出現,這很很很很重要.
還記得當年有一個同事遇到一個問題:數字錄像機(DVR,也稱之為後端存儲設備)會在每10個小時出現一次宕機,這還算比較有規律的,解決起來大概只是時間要長一點.於是第一步重現:
同事讓錄像機一直在哪裡運行進行重現工作?結果10個小時後沒有能夠出現,為什麼呢?經過與測試部門的對比運行環境,發現可能與使用的視頻信號 源有關係:測試部門使用的DVD與同事不同,那就弄成一樣的,結果還真是,但有一個非常奇特的事情:為什麼當MTV中的男主角穿著綠衣服紅褲子出現的時候設備就崩潰了,而出現問題時正好是10小時?難道是因為錄像機嫌男主角太俗?顯然這不太科學啊.
不過,我們既然已經重現了,找到了這個規律,離解決就不遠了.這意味著我們已經定位到了問題迸發的時機和條件.緊接著我們就可以開始進一步定位了,因為整個系統是我們搭建的,從視頻信號到最終編碼成視頻這一過程中經歷了什麼我們都清清楚楚,於是可以讓程序員上場了.而程序員的方法也非常簡單粗爆直接有效,但非常非常非常有效,也就是屏蔽部分功能看在相同的條件下問題是否仍然出現,如果不出現,繼續縮小範圍直到找到某一個函數某一行代碼為止.
最終發現:當那個男主角出現時因為紅綠兩個顏色出現時編碼成一張圖像的尺寸超過預設的緩存區,造成了內存越界,操作系統自然不會允許這種事情發生,於是設備軟體就崩潰了.
解決問題只是分分鐘的事情:加大緩衝區,對於超過緩衝區尺寸的數據做特別的處理,比如丟棄,或者重新開設更大的緩衝區.
新手往往體會不到這種方法的威力,甚至簡單到僅僅一個幾十行代碼的函數都不願意使用這種方法,而是面對代碼反覆的看來看去但仍然看不出任何問題.對於系統級的問題,更是要反覆使用這種辦法來定位,只要能夠定位到,問題就解決了99%,你就畫出了那根價值9999美元的粉筆線.
下期預告:
預計周三或周四發第14篇文章,題目嘛,暫時保密。
敬請期待.
正文完
如何成為職業軟體工程師


TAG:全球大搜羅 |