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