■ 浙江 張江山
編者按:筆者單位的信息中心的重點工作是快速排查解決信息系統(tǒng)生產(chǎn)問題、保障信息系統(tǒng)安全運行。經(jīng)實踐后,對信息系統(tǒng)生產(chǎn)問題分析處理進行總結(jié)歸納,并提煉成最佳實踐,本文將進行詳細探討和分享。
生產(chǎn)問題是信息系統(tǒng)運行使用過程中遇到的各種需要研究討論并加以解決的矛盾和疑難,用戶在使用信息系統(tǒng)過程中如果遇到功能、性能、權(quán)限以及數(shù)據(jù)等各種與實際預(yù)期不相符合的異常狀況,站在用戶角度都會將此狀況報告為問題并要求技術(shù)人員進行處理解決。
目前的工作中,解決生產(chǎn)問題,除了對技術(shù)的掌握外,對人本身經(jīng)驗有一定依賴,本文主要從問題分析、問題解決、防范建議等幾個方面展開一些探討,力爭對經(jīng)驗進行提取和整理總結(jié),形成最佳實踐,對更好地解決生產(chǎn)問題提供參考和幫助。
當一個系統(tǒng)生產(chǎn)問題發(fā)生時,可能是由技術(shù)監(jiān)控手段報告,也有可能是老師或?qū)W生在使用系統(tǒng)時遇到問題后反映。
分析生產(chǎn)問題的第一步是要對問題現(xiàn)象做精確的描述和記錄,例如時間、范圍、人員、動作或異常現(xiàn)象等。對已知問題可以直接利用問題案例庫進行解決。對未知問題的處理思路。
應(yīng)用系統(tǒng)運行在各種IT設(shè)施之上,應(yīng)用的生產(chǎn)問題并不只是由程序缺陷引起,可源自于底層的基礎(chǔ)設(shè)施、用戶的操作等,按發(fā)生的位置來分,也可以分為客戶端和服務(wù)器端。
當?shù)玫揭粋€問題現(xiàn)象的描述時,首先要對該問題進行初步的定位,為進一步問題分析縮小范圍,常用的預(yù)判思路有:
1. 單個用戶反映的客戶端問題需要認真確認現(xiàn)象,此類問題通常是操作不熟悉或者客戶端環(huán)境引起。但當有3個以上用戶同時報一個問題現(xiàn)象時,可初步歸為服務(wù)器端問題或者應(yīng)用客戶端軟件缺陷。
2. 跟業(yè)務(wù)邏輯相關(guān)的現(xiàn)象,初步先排除IT基礎(chǔ)設(shè)施問題 。
3. 底層的故障通常會帶來上層大面積故障,但越往底層,出錯概率越低 。
在有了初步判斷后,就要查找理清問題原因。一個問題的發(fā)生,并不是簡單的因果關(guān)系,通常是存在一個原因鏈,當一個或多個起始原因發(fā)生,在系統(tǒng)本來運行機制的控制下,一環(huán)環(huán)影響,最后一環(huán)(直接原因)造成了問題的發(fā)生,現(xiàn)象能被監(jiān)控到或者被反映出來。
例如:某次變更修改課程管理系統(tǒng)的后臺文件生成策略->每天產(chǎn)生1萬個空文件->主備機同步比往常延遲半小時才能完成,備機不能按時獲取到課程排版文件->連接到備機的用戶無法及時下載到課程排版報表。
分析問題,首先要求系統(tǒng)運維人員要了解整個應(yīng)用系統(tǒng)的運行機制,主要包括應(yīng)用拓撲結(jié)構(gòu)、配置信息、數(shù)據(jù)流、系統(tǒng)關(guān)聯(lián)關(guān)系、重要業(yè)務(wù)邏輯。其次就要排查問題原因,借鑒軟件測試相關(guān)理論,排查問題原因也可以有兩種方法,即白盒法和黑盒法。白盒法指的是通過搜集信息方式來分析問題。黑盒法則是通過找變化、找規(guī)律、找聯(lián)系,從外部來進行推理。
分析問題能夠?qū)Ω螁栴}提供幫助,也能夠通過理清脈絡(luò)來排除問題發(fā)生的隱患。但是當問題發(fā)生時,盡快恢復(fù)對外服務(wù)、消除后續(xù)影響才是首要目的。因此在遇到未知問題并且短時間內(nèi)找不到解決方案時候,首先從盡快先消除和減少影響面入手,采取應(yīng)急臨時解決措施,而不是一味地在業(yè)務(wù)影響時間內(nèi)鉆牛角尖去找出問題原因。
目前我校信息系統(tǒng)應(yīng)急預(yù)案大部分都是針對這類場景,如在遇到突發(fā)性不可預(yù)知的設(shè)備故障時,首先就是采取通過應(yīng)急切換之類的手段隔離故障機器,恢復(fù)業(yè)務(wù)使用,或者在遇到一些進程或者用戶訪問突然異常時候,往往先嘗試緊急重啟相關(guān)應(yīng)用服務(wù)進行初始化操作。
在目前的運維實踐過程中,從問題所產(chǎn)生的影響來看,主要有性能類、數(shù)據(jù)類、功能類、進程類、接口類等幾個方面。
根據(jù)對最近半年的信息系統(tǒng)數(shù)十個生產(chǎn)問題進行初步統(tǒng)計,問題所表現(xiàn)出來的影響主要體現(xiàn)在數(shù)據(jù)異常、進程異常和功能異常上,但是從問題原因分析難易程度來看,性能和進程方面的排查耗費精力較多,難度也相對較大。
性能類問題是目前運維過程中經(jīng)常遇到的問題,主要集中在用戶并發(fā)訪問量大的教學管理系統(tǒng)和校園網(wǎng)站,現(xiàn)象就是系統(tǒng)響應(yīng)緩慢甚至不能訪問,從技術(shù)角度來看會有三種情況,系統(tǒng)資源瓶頸、參數(shù)或設(shè)計缺陷、數(shù)據(jù)量或用戶訪問超常規(guī)增長。
不同的情況原因有不同的應(yīng)急解決辦法,用戶反映性能問題后,首先需要檢查系統(tǒng)資源使用情況了解到瓶頸所在的層次,如果是系統(tǒng)資源層面如CPU、內(nèi)存已經(jīng)達到閥值,則要考慮緊急擴容或臨時限制用戶使用以確保當前資源能滿足一定范圍的用戶訪問,這種措施雖然會影響一部分用戶使用,但是至少不會引起全面的系統(tǒng)堵塞現(xiàn)象。
如果系統(tǒng)資源檢查結(jié)果正常,同時用戶訪問量沒有明顯擴大的情況下,則需要考慮系統(tǒng)參數(shù)設(shè)置或者應(yīng)用設(shè)計缺陷導(dǎo)致的問題,檢查數(shù)據(jù)庫和中間件的參數(shù)設(shè)置是否合理,程序設(shè)計特別是SQL語句是否存在效率問題。
遇到此類情況,比較常見的應(yīng)急措施是重啟應(yīng)用,使被占滿的應(yīng)用資源進行初始化。
如果能充分預(yù)估到可能出現(xiàn)的性能瓶頸,可以通過相關(guān)壓力、容量等測試進行規(guī)避或者提前防范。
數(shù)據(jù)類問題一般由用戶反映業(yè)務(wù)數(shù)據(jù)出現(xiàn)錯誤需要排查解決,這在學生信息庫、課程管理系統(tǒng)等數(shù)據(jù)敏感系統(tǒng)中比較常見,由于數(shù)據(jù)產(chǎn)生的邏輯往往可以追溯,因此針對該問題往往從兩方面入手排查:
首先就是排查數(shù)據(jù)源是否正確,此外需要根據(jù)程序處理邏輯逐步排查數(shù)據(jù)出錯在哪個環(huán)節(jié),必要時需要手工進行計算比較。原因一旦明確就可以做相應(yīng)的修復(fù)處理。
功能類問題往往與軟件缺陷直接相對應(yīng),針對用戶通過客戶端使用后反映的功能問題,如果是直接界面上可以看出的異常,在確認用戶權(quán)限、使用方式等正確情況下,則一般可以定位是程序缺陷,進一步根據(jù)日志和程序邏輯通過對該錯誤現(xiàn)象進行追溯,定位到問題根源。
針對此類問題,首先要了解到是否首次發(fā)生、是否普遍現(xiàn)象,如果用戶之前可以正常使用此類功能,從用戶權(quán)限、客戶端環(huán)境、現(xiàn)場數(shù)據(jù)、使用方式、最近變更情況等去排查引發(fā)此功能問題的原因。
進程異常類問題經(jīng)常是生產(chǎn)問題中最為棘手問題之一,進程異常特別是進程突然掛起或僵死,一方面發(fā)生比較突然并嚴重影響業(yè)務(wù)使用,需要快速恢復(fù),另一方面經(jīng)常遇到排查此類問題時候缺乏清晰的系統(tǒng)日志記錄和現(xiàn)場保留信息,同時由于進程所在環(huán)境的復(fù)雜性,排查此類問題需要硬件、操作系統(tǒng)、數(shù)據(jù)庫、中間件、應(yīng)用自身等同時排查取證,協(xié)調(diào)難度較大。
目前針對該問題也積累了一些常用幾種排查和處理經(jīng)驗:針對常見的如JAVA進程突然僵死之類的問題,往往需要通過dump文件及時采樣當時的內(nèi)存信息分析。進程問題往往也與操作系統(tǒng)參數(shù)設(shè)置關(guān)系密切,特別是某些應(yīng)用系統(tǒng)在運行過程中會針對不同的應(yīng)用請求開啟不同的服務(wù)進程,考慮到應(yīng)用進程數(shù)都是最終占用了操作系統(tǒng)層面的進程總數(shù),因此操作系統(tǒng)進程參數(shù)如果設(shè)置過低則會嚴重影響到應(yīng)用進程數(shù)的增加。
如果進程問題解決較難,可以定期在非工作時間段重啟進程甚至重啟整臺機器,通過重啟進行初始化操作,因為生產(chǎn)系統(tǒng)運維的核心目標首先是滿足用戶在服務(wù)時間內(nèi)運行正常。
通俗地理解,只要有數(shù)據(jù)的交互或者系統(tǒng)之間的連接就可以定義為接口,如接口數(shù)據(jù)傳輸、數(shù)據(jù)庫連接、API連接、進程間通信等,接口數(shù)據(jù)問題的排查思路可以借鑒數(shù)據(jù)問題的排查思路,主要就是通過檢查日志等方式尋根溯源,接口問題比較困難的可能是用戶往往只是反映數(shù)據(jù)或者功能問題,但是最終是因為模塊或者系統(tǒng)間數(shù)據(jù)通信異常導(dǎo)致。
針對此類問題,首先就是運維人員要在開發(fā)階段要提出詳細的運維需求,特別是數(shù)據(jù)交互過程中日志記錄需求,能將所有程序運行過程通過詳細的日志記錄下來,其次要有完善的接口方面的應(yīng)急預(yù)案。
對一些比較顯現(xiàn)的接口數(shù)據(jù)來往,一旦遇到問題,可以通過其他變通方式將數(shù)據(jù)傳輸?shù)较掠蜗到y(tǒng)。對于一些不能直接采用手工處理的接口,則需要實現(xiàn)制定完善的應(yīng)急預(yù)案,最好對接口傳輸有備用的變通手段。
相比教學業(yè)務(wù)需求主要是從系統(tǒng)具體功能考慮,運維需求則就是面向安全運行、面向日常運維操作效率考慮,運維需求提的內(nèi)容主要就是有助于應(yīng)用系統(tǒng)運行更安全、更可靠、更可控,有助于日常運維和應(yīng)急處理效率更高,最終目的其實也是為了更好地支持業(yè)務(wù)開展,保障系統(tǒng)服務(wù)水平。
常見的運維需求主要都是從應(yīng)用可靠性、可用性、安全性、環(huán)境兼容性、日志規(guī)范、監(jiān)控需求、運維人機界面、安裝部署規(guī)范等一些方面考慮。
不同的業(yè)務(wù)特點有不同的運維需求,如針對教學管理系統(tǒng),首先強調(diào)的是穩(wěn)定可靠和性能效率,而針對學生信息庫、信息網(wǎng)站則更強調(diào)批量處理性能和報表訪問效率以及應(yīng)急數(shù)據(jù)處理的便利性等方面,完善的運維需求不僅可以減少問題發(fā)生概率,同時還能有助于更快地分析定位問題原因和解決問題。
測試不僅僅用于檢驗系統(tǒng)是否滿足業(yè)務(wù)要求,同時也是用來檢驗系統(tǒng)是否滿足安全運行要求,在設(shè)計測試案例過程中,需要充分考慮到對業(yè)務(wù)和技術(shù)邊界臨界場景的覆蓋,站在運維角度,還希望在測試過程中增加一些“破壞性”場景以檢驗系統(tǒng)的可靠性和應(yīng)急預(yù)案是否有效,特別是對核心教學系統(tǒng)尤為重要。
如前文所述,問題現(xiàn)象的發(fā)生都存在一條原因鏈,問題暴露在發(fā)生鏈越后端處理起來越復(fù)雜棘手。很多問題如性能、資源等方面的發(fā)生都有前兆,所以要充分利用一些已有的監(jiān)控工具,對應(yīng)用運行的關(guān)鍵點進行不間斷監(jiān)控,除了資源利用率、進程、差錯日志等常規(guī)監(jiān)控以外,條件允許的話,還要對運行質(zhì)量進行監(jiān)控,如數(shù)據(jù)一致性、程序響應(yīng)時間、用戶訪問異常行為等,目的是能及時發(fā)現(xiàn)問題出現(xiàn)的征兆,贏得問題排查處理時間,減少對教學業(yè)務(wù)的影響。
除此之外,包括各個IT環(huán)境之間的系統(tǒng)配置一致性、數(shù)據(jù)一致性、安全策略實施、系統(tǒng)軟件補丁升級等也都是事先發(fā)現(xiàn)問題和防范問題的重要方面。
在具體的問題處理案例中,不同類型的應(yīng)用系統(tǒng)處理方式不同,所采用的技術(shù)、要求的技能、緊急程度等也往往不同,本文討論的主要是一些校園信息系統(tǒng)領(lǐng)域的生產(chǎn)問題處理思路,并總結(jié)一些最佳實踐。
隨著信息技術(shù)的日新月異發(fā)展和應(yīng)用系統(tǒng)不斷地升級開發(fā),整體系統(tǒng)環(huán)境越發(fā)復(fù)雜。因此,要提高問題處理效率,首先就是要不斷地加強對信息系統(tǒng)的技術(shù)掌握、充分熟悉校園信息系統(tǒng)特點、完善問題管理流程、維護好問題處理知識庫、積累技術(shù)經(jīng)驗提高問題處理能力。