■
最近,公司某生產(chǎn)應(yīng)用系統(tǒng)升級后,出現(xiàn)一重要模塊無法正常使用的故障,比較奇怪的是該模塊同時提供國際和國內(nèi)兩種報表服務(wù),而其中只是國際報表不能正常使用。具體現(xiàn)象是提取國際報表時提十幾次可能有1次正常輸出。在發(fā)現(xiàn)問題后,系統(tǒng)研發(fā)項目組立即找到運維部門協(xié)助排查故障,而筆者有幸參與了故障排除的整個過程。
從故障現(xiàn)象看,是系統(tǒng)升級后出現(xiàn)的應(yīng)用故障,應(yīng)重點關(guān)注應(yīng)用層面的問題。但項目組認為,同樣的國內(nèi)報表功能都正常,只是國際報表功能不正常,應(yīng)該看一下安全訪問控制策略有沒有問題。找到負責信息安全的同事詢問最近是否對安全策略有調(diào)整,得到的答復是沒有。
再次詢問項目組這次的應(yīng)用系統(tǒng)升級修改了哪些地方,回復說只是新增了一些功能(實際上也同時增加了報表內(nèi)容),沒有其他變化。請項目組讓使用國內(nèi)報表功能正常的用戶使用國際報表功能看看是否正常,結(jié)果是國內(nèi)報表功能正常的用戶提取國際報表時也出現(xiàn)提取失敗的現(xiàn)象。繼續(xù)追問國際報表和國內(nèi)報表有什么不同,項目組答復是,國際報表一般比國內(nèi)報表要大,因為內(nèi)容要多一些,格式等其他都一樣(后來發(fā)現(xiàn)這就是問題關(guān)鍵)。問題再次陷入了僵局。
既然是應(yīng)用故障,那就再試一下抓包分析看看有什么異常信息。運維配備的Fluke OPV協(xié)議分析儀派上了用場。先將應(yīng)用系統(tǒng)接口服務(wù)器的端口鏡像出來,模擬用戶使用情況,提取國際報表失敗和成功時的數(shù)據(jù)包做對比分析。與此同時,項目組還搭建了一個模擬生產(chǎn)環(huán)境用于測試。在測試過程中發(fā)現(xiàn),在環(huán)境搭好后,第一次提取國際或國內(nèi)報表時,都肯定會失敗。難道是系統(tǒng)存在什么未知的Bug?但這個問題很快也被放棄,原因是國內(nèi)同行沒有使用同類型的應(yīng)用軟件,無法幫助我們判斷是否存在Bug的問題。
最后,通過大量的數(shù)據(jù)包比對分析發(fā)現(xiàn),在故障出現(xiàn)時,用戶端一般都在發(fā)出提取報表請求數(shù)據(jù)包后的30s時,會再次向服務(wù)器端發(fā)出停止發(fā)送數(shù)據(jù)包的FIN終止傳輸信號。然后就會出現(xiàn)我們看到的故障現(xiàn)象,即用戶無法正常提取國際報表。
那這個30s是否是應(yīng)用系統(tǒng)設(shè)置的閥值還是用戶操作系統(tǒng)設(shè)置的呢?咨詢微軟工程師后得到的答復是,操作系統(tǒng)不會設(shè)置這個閥值,只能是由應(yīng)用軟件設(shè)置。立即詢問應(yīng)用軟件工程師,應(yīng)用軟件有沒有這個設(shè)置,回復是沒有。就算是有設(shè)置閥值的地方,也是設(shè)的60s。對此答復,筆者想到了一個測試方法來驗證。
請項目組同事重新搭建一個模擬環(huán)境,在第一次提取一個國內(nèi)報表(內(nèi)容盡可能少),因為筆者想驗證的是,如果提取的報表很小的情況下,并確保在30s內(nèi)可以完成提取時,還會不會出現(xiàn)每次都會在第一次模擬測試時的失敗現(xiàn)象。反復實驗結(jié)果是,第一次可以正常完成報表提取,同時也就驗證了應(yīng)用軟件確實存在30s的響應(yīng)時間閥值問題。
問題最終被定位,即由于應(yīng)用軟件客戶端發(fā)出請求后,如由于提取的表生成時間超過30s,客戶端會自動發(fā)送放棄接受數(shù)據(jù)的請求,而新升級系統(tǒng)后的國際報表內(nèi)容增加較多,報表生成時間一般都會超過30s,因此升級后才出現(xiàn)了大量國際報表不能正常提取的問題。該應(yīng)用軟件廠商在拿到我們提供的測試結(jié)果后,第二天緊急向項目組提供了一個軟件升級補丁,修復完成后故障現(xiàn)象隨即消失,故障徹底排除。
對于此次應(yīng)用系統(tǒng)故障的排故過程,筆者有幾點體會想和同行們分享。
1.在系統(tǒng)發(fā)生故障時,首先需要詳細詢問用戶故障現(xiàn)象,是完全不能用還是部分不能用?還是系統(tǒng)響應(yīng)變慢?這些問題建議通過建立臨時的QQ群組來和用戶直接溝通,這樣用戶反應(yīng)問題迅速,還可以直接語音、視頻溝通,以及上傳下載測試程序等,總之好處多多。
2.如果是系統(tǒng)功能完全不能用,應(yīng)首先了解系統(tǒng)硬件是否發(fā)生故障或近期有無變更,比如網(wǎng)絡(luò)設(shè)備、服務(wù)器或者存儲設(shè)備。這些可通過用戶交叉測試、網(wǎng)絡(luò)連通性測試等方法驗證。
3.如果是部分功能不能用或系統(tǒng)響應(yīng)變慢,應(yīng)立即查找應(yīng)用軟件方面的問題。首先應(yīng)查看是否有安全策略變更,確保不是安全設(shè)備策略阻止了新應(yīng)用數(shù)據(jù)傳輸,這通過檢查安全設(shè)備配置即可迅速判斷。另外,還需跟蹤數(shù)據(jù)包流向,確保不是網(wǎng)絡(luò)配置的問題。
4.如果確認故障在應(yīng)用軟件本身,就需要利用網(wǎng)絡(luò)分析軟件或硬件來幫助查找故障點。這就需要收集大量的數(shù)據(jù)包進行采樣分析,分析人員需要對安全、網(wǎng)絡(luò)和應(yīng)用系統(tǒng)都有較為豐富的經(jīng)驗,更有利于幫助問題查找,不至于陷入大海撈針的窘境。研發(fā)人員永遠都覺得系統(tǒng)的故障基本都是安全或者網(wǎng)絡(luò)引起的,因此對數(shù)據(jù)包分析的人員,必須具有較為豐富的知識及個人權(quán)威,這純屬個人觀點,僅供參考!
5.在做應(yīng)用軟件故障分析時,強烈建議有條件的情況下搭建模擬環(huán)境進行測試。這不僅能有效排除其他干擾因素,還能在不影響生產(chǎn)的情況下進行反復模擬測試,這也是我們這次排故比較快速和順暢的主要原因之一。