續《 發生在眼前的故事:不做好最壞的打算,往往事情就會去到最壞的地步(五)》
以下事情發生在9月23日的1:30~3:30PM
午餐回來後,重新調整了人員的分工,除了專案經理A負責進行電話和QQ服務外,其他的三位同事和dy共四位分別對早上辨識出來的10個可疑問題進行跟蹤。
不到2個小時,我們從分工跟進就已經初見成效,頭三個懷疑對象中,有兩個非常有價值的問題,
- 最耗時的處理是Excel檔案匯入處理,此功能屬於系統上一期的功能,由於本期功能沒有做任何變動,按說應該不是被懷疑對象,但是從日誌分析可以看到,此功能每天被使用到的次數不少,但是處理耗時巨大;通過程式的分析,發現非同步處理方式實現不算複雜,結合ajax的方式也不會太繞彎。但是在測試環境上,就發現每一次使用此功能,竟然會阻塞住其他使用者的請求,在生產系統上經測試現象同樣存在!這是一個非常有意義的線索,下一步應該進一步根據分析具體的原因;
- 最經常被使用到的待處理事項功能,此功能使用者一登入就是使用,而且還會頻繁重新整理,本期功能也沒有做任何變動,但是從日誌上看,使用次數和耗時同樣可觀;通過在生產系統的空閑時刻的進行訪問,竟然是16個CPU和32G的內容都需要執行2.5秒,在感觀上感覺明顯;結合Weblogic工作原理,預設啟動時有8個服務線程計算,此時只有有8個使用者一併登入,背景工作執行緒數非擴充不可,同時由於耗時也會影響Connection Pooling的工作效率;
前面三個懷疑對象,已經有兩個小有成果,由於是一期的功能,本期沒有改動,因此跟蹤工作馬上進行下一步的調整:
- ydy跟進Excel匯入問題,初生牛犢不怕虎,他沒有負擔,沒有做過一期,可能能發現問題;
- 項目組內參加一期的lq和未參加過一期的wxy兩個人則對待處理事項功能的進一步跟進;
- 原先協助發現Excel匯入問題的cdw同事則調整加快對後續懷疑對象的進一步分析;
小插曲,告知所有參加過一期的同事“Excel匯入導致阻塞其他使用者的請求”,為了讓他們深刻感受到這個問題,對於每一個提出“不大可能吧,以前好好的”同事,我就在生產系統上示範一次,讓他們感受終端使用者的體驗!為了讓同事知道這個故障其實很嚴重,我只是使用了100行記錄的Excel檔案,就足以讓終端使用者的任何請求等待10~20秒,通過這些證明,結合理論的推論是可以大概知道為何伺服器類似“死機”時,從Thread Dump上看到的是等待getConnection!
在下午的檢查期間,還出現了類似死機,是我們給一期的同事示範沒有多久就發生,此時由於同事在旁邊監控所以發現及時恢複,專案經理A這次也能安裝規範知會業主和終端使用者,並且進行相應的解釋。
以下事情發生在9月23日的4:30~6:00PM
經過了1個小時,檢查工作前面兩個被確認的懷疑對象解決情況,結果竟然是還沒有解決,因此趕快再次尋找資源協助,通過其他團隊找來了進行SQL最佳化經驗的同事dzm。很快,他先是協助cdw將另外一個最佳化語句提升了4倍效能,接著他有協助負責待處理功能最佳化的同事,將效能從2.5秒最佳化到0.25秒,整整最佳化了10倍。
Excel匯入問題陷入僵局,ydy暫時沒有發現任何可能原因,因此通過電話協調參與一期的同事lz負責Excel匯入功能的跟進,由於是使用開源的軟體,特別感慨“用java開源組件進行開發而毫不存疑是很不明智的,而且是有危險性!”,在使用軟體前沒有進行充分測試,“出來混的始終要還”!這是最壞的時刻,也是最好的時刻,同事告知前兩天在另一個項目也發現雷同問題,現在還沒有解決,但是有一些思路可以嘗試,不至於斷了線索。
接近6點期間,系統又出現一次類似“死機”情況,這次是終端使用者在QQ上彙報,這次沒有被我們監控發現,是因為所有的兵力都投放在問題跟蹤分析上導致的。
以下事情發生在9月23日的7:30~12:00PM
晚餐回來後,需要跟進的事情第一件就是結合情況進行安排故障部署計劃和公告。(為什麼需要這樣做,可以參考以往的博文)通過下午的跟蹤排查,我們的10個疑點,有4個被排除,有6個列入今天的修複計劃,和團隊的同事溝通協商安排出時間後,通過QQ和電話知會業主。
在修複Bug,進行Hotfix的時候,還出現過一些小插曲,譬如團隊同事對版本控制的疑問(可以參考博文,如何對生產系統進行Hotfix),發現專案經理A理解是一回事做是一回事,真是“實踐是檢驗真理的唯一標準”!
依然還要做好最壞的打算
團隊最後順利安裝計劃完成了Hotfix,但是事情還沒有真正驗證完成,讀者你知道嗎?雖然已經淩晨零點,但是我們還要在收隊前做好分兩班的工作計劃,具體安排如下:
- 工作很辛苦,但是有一班還得繼續檢查。包括我在內,明天早上8點之前到底業主辦公環境,繼續跟進,做好最壞打算,確保今天的Hotfix有效,計劃明天下午2點撤退;
- 負責修整的一班,這班同事明天可以休息到11點才上班,和前面的一班換防!
(這個故事最終完畢,我們也在一天的惡戰中取得成功!學習下圍棋的高手們,比賽完畢後還要進行複盤,這樣才能更加加深理解,其實期間還有不少小故事可以獨立成文,待以後再發布,真是細節決定成敗。)