nsd 分析
確定讓服務器崩潰的進程通常是解決服務器崩潰的第一步。在 domino 6 和更高版本中,nsd 文件是一個很好的起點。nsd 給出服務器狀態(tài)的所有當前信息(所有線程的調用堆棧、內存信息,等等)。在發(fā)生崩潰時,domino 服務器將自動生成一個 nsd 日志文件,并存儲在 data\ibm_technical_support 目錄中。nsd 日志文件的文件名中帶有一個時間戳,展示了 nsd 是何時生成的。例如表示這個 nsd 是 2006 年 1 月 17 日生成的。nsd 在運行時,會附加到每個進程和線程,以轉儲調用堆棧。這有助于您確定服務器或工作站崩潰的原因。 nsd 文件的核心是堆棧跟蹤部分。這一部分提供代碼路徑的一個 breakdown,當前存在的進程中的每個線程要遍歷該路徑,以進入其當前狀態(tài)。這對于考察服務器上的掛起或崩潰場景非常有幫助。此外,通過檢查 nsd 文件,可以找到 domino data 目錄中生成的任何核心文件,并進行基本的分析,以跟蹤死去并遺留下核心文件的進程所做調用的最終堆棧。在諸如 domino 這樣的復雜產(chǎn)品中,兩臺不同服務器上相同類型的動作的堆棧跟蹤可以產(chǎn)生不同的結果。 在 nsd 文件中,通過執(zhí)行對單詞 “fatal”、“panic” 或 “segmentation” 的搜索,可以識別失敗進程中的可執(zhí)行部分。找到進程后,我們可以看出誰在它之前,并有望確定崩潰是如何發(fā)生的。有時,當 “panic”、“fatal” 都沒有找到時,核心轉儲將包含對函數(shù)中 “segmentation fault” 的引用。這表明,進程試圖訪問因某種原因已破壞的共享內存段,并將不調用 “fatal_error” 或 “panic” 而崩潰。 下面是 nsd 文件的示例摘錄,其中的一個服務器進程涉及到崩潰: ### fatal thread 39/83 [ nserver:07c0: 2764]
### fp=0743f548, pc=60197cf3, sp=0743ebd0, stksize=2424
exception code: c0000005 (access_violation)
############################################################
@[ 1] 0x60197cf3 nnotes._panic@4+483(7430016,496dae76,0,496dace8)
@[ 2] 0x600018a4 nnotes._osbblockaddr@8+148(1153f38,2000000,743f608,1)
@[ 3] 0x6000bd92 nnotes._collectionnavigate@24+610(0,743fc74,f,0)
@[ 4] 0x600626cc nnotes._readentries@68+2860(4c5440e8,4cfb8dba,800f,1)
@[ 5] 0x600b9f6f nnotes._nifreadentriesext@72+351(0,4cfb8dba,800f,1)
@[ 6] 0x10032d40nserverl._serverreadentries@8+1424(0,8d0c0035,4b64b5bc,4ae46dd6)
@[ 7] 0x100191fc nserverl._dbserver@8+2284(41b0383,cb740064,0,23696f8)
@[ 8] 0x1002b8c8 nserverl._workthreadtask@8+1576 (4711d68,0,3,563fb10)
@[ 9] 0x100016cb nserverl._scheduler@4+763(0,563fb10,0,10ec334)
@[10] 0x6011e5e4 nnotes._threadwrapper@4+212 (0,10ec334,563fb10,0)
@[11] 0x77e887dd kernel32.getmodulefilenamea+465 當確定了失敗進程后,您就可以著重故障診斷這個特定的進程了。
servertasks
如果一臺服務器不斷地崩潰(例如,每五分鐘一次),一個有用的故障診斷步驟是,從服務器的 notes.ini 文件臨時刪除 servertasks= 行。然后,服務器可以重新啟動,任務可以單獨地加載,以確定是哪個進程導致崩潰。 panic 消息
當 domino 檢測到一個內部一致性錯誤,或者一個可能導致數(shù)據(jù)破壞或其他問題的條件時,它會立即調用一個名為 panic 的子例程。這是在代碼操作時,用于不斷監(jiān)控代碼的關鍵部分的一種特殊構造。這有助于在問題升級并可能破壞數(shù)據(jù)之前,盡可能早地捕捉問題。當發(fā)生 panic 時,它將導致系統(tǒng)停止(因此可看成是一種可控制的崩潰)。panics 產(chǎn)生的消息,有時是英語形式的,有時是代碼形式的(例如,panic: 04:3c)。您可以將該代碼提交給 lotus software technical support,以便進一步故障診斷。 故障診斷工具
本節(jié)介紹您在遇到 domino 服務器崩潰或掛起時可用的一些故障診斷工具。在使用任何這些工具之前,請確保參考 domino 管理文檔。此外,domino 自助支持頁面 對于故障診斷信息也是一個好的資源。 rip(domino r5)
rip 文件是在服務器崩潰時產(chǎn)生的。該文件包含關于服務器崩潰時在做什么的信息。它報告系統(tǒng)上的任何崩潰,而不只是與 domino 有關的崩潰。rip 文件只在 domino 5.x 中才產(chǎn)生。在 domino 6 和更高版本中,nsd 取代了 rip,并且還包括 rip 中沒有的附加功能。 要產(chǎn)生 rip 文件,需要將 qnc.exe 加載到 domino 服務器上。qnc.exe 程序(通常叫做 “quincy”)是與 domino 一起發(fā)布的默認調試程序。qnc.exe 程序通常位于 \domino 目錄中。要啟用 qnc.exe,請在操作系統(tǒng)的命令提示符下輸入 “qnc –i”。也可以通過在服務器啟動時輸入 “qnc nserver” 啟動 qnc.exe。如果在服務器崩潰時不生成 rip 文件,那么請檢查 qnc.exe 是否已啟用。通常,rip 文件創(chuàng)建在 data 目錄中。 nsd(domino 6 和更高版本)
如前所述,domino 6 和更高版本提供 nsd 特性。這個文件包含關于服務器崩潰時的狀態(tài)信息。有關更多信息,請參閱本文前面的 “nsd 分析” 一節(jié)。 內存轉儲(domino 6 和更高版本)
在 domino 6 和更高版本中,可以在服務器控制臺上使用命令 “sh memory dump” 來創(chuàng)建內存轉儲文件。內存轉儲文件包含關于 domino 當前使用的內存的信息。這在故障診斷性能問題和內存泄漏時非常有用。通常,內存轉儲文件位于 data\ibm_technical_support 目錄中。內存轉儲文件名包含一個時間戳,表示生成 nsd 時的時間。例如: 注意:要將可用內存記錄到文件,而不是在服務器控制臺上查看它,請輸入下面的服務器控制臺命令: sh memory dump >memory.txt http 請求日志
為了故障診斷與 domino web 服務器崩潰和掛起有關的問題,lotus software technical support 通常會要求您創(chuàng)建 http 請求日志。要為請求日志啟用默認設置,請編輯服務器的 notes.ini 文件,并添加 httpenablethreaddebug=1 這一行。這將 http 請求日志記錄設置為默認級別。(要將日志記錄級別設置為記錄更詳細的信息,請參閱 domino 管理文檔。)也可以通過在 domino 服務器控制臺輸入 “tell http debug thread on | off” 動態(tài)地啟用 http 請求日志記錄。啟用了 http 請求日志記錄之后,domino 就會創(chuàng)建一系列名為 htthr*.log 的文件,例如 。 http 請求日志記錄應該只用于故障診斷特定的問題,并且通常是在 lotus software technical support 的指導和幫助下完成的。不要將請求日志記錄用于其他目的,比如一般管理。這些日志文件隨著時間會不斷增大,所以不應該長時間啟用該設置,否則會消耗掉所有可用的設備空間。 automatic data collection
notes/domino 6.0.1 引入了自動診斷數(shù)據(jù)收集工具,也叫做 automatic data collection,或者簡稱為 adc。automatic data collection 只意味著,當 notes 客戶機或 domino 服務器崩潰時,該程序將收集調試崩潰時必需的所有數(shù)據(jù),并在客戶機或服務器重啟時發(fā)送到一個 mail-in 數(shù)據(jù)庫。然后,管理員就每個域具有一個位置,在這里,他們可以看到所有客戶機和服務器已經(jīng)發(fā)生的所有崩潰。這將有助于消除這樣的情況,即管理員或用戶在客戶機或服務器崩潰時不能捕獲適當?shù)臄?shù)據(jù)。