故障诊断
在本节中,我们来看一些用于故障诊断服务器崩溃和服务器挂起的一般方法。
故障诊断 Domino 服务器崩溃
如果 Domino 已经崩溃,并且不能重启,那么从 Notes.ini 变量 Servertask 删除任务,并试图缩小范围和识别导致崩溃的任务。当您怀疑是某个特定的任务导致问题时,就打开服务器控制台,并缩小该任务产生的可能的错误消息的范围。例如,如果在访问 Mail.box 中的邮件时路由器崩溃了,那么重新命名 Mail.box 并允许服务器重新创建 Mail.box。
如果您怀疑问题是已破坏的数据库导致的,那么在该数据库上运行离线维护任务。如果崩溃是按规律发生的,那么检查崩溃发生时服务器上执行的动作。
考虑下列问题:
Domino 服务器向控制台或日志文件报告错误消息吗?
错误消息的确切语法是什么样的?
错误消息是哪里产生的?是 Domino 服务器上,还是 Notes 客户机上?
该问题第一次出现是什么时候?
在问题开始出现之前,最近做了更改吗?
故障诊断 Notes 客户机崩溃
首先,找出问题是否特定于某个用户。如果是的,就检查该用户的配置,并将之与其他用户的配置进行比较。此外,还要确定问题发生是否归结于访问某个特定的应用程序。如果是的,就请一个开发人员来检查应用程序。
如果您怀疑问题是由已破坏的数据库或文档导致的,就运行维护任务 Updall、Fixup 和 Compact(用适当的开关)。此外,如果您认为问题是由于坏的索引,那么试图重新创建数据库的全文本索引(如果可能的话)。
故障诊断 Domino 服务器挂起
如果常量信号量问题出现在服务器控制台上,那么检查任务的安排是否冲突。如果系统响应缓慢,那么检查您的非-Domino 应用程序,看它们是否也运行缓慢。另外, 一般来说,应该确保用所有最新的补丁更新了操作系统。
NSD 分析
确定让服务器崩溃的进程通常是解决服务器崩溃的第一步。在 Domino 6 和更高版本中,NSD 文件是一个很好的起点。NSD 给出服务器状态的所有当前信息(所有线程的调用堆栈、内存信息,等等)。在发生崩溃时,Domino 服务器将自动生成一个 NSD 日志文件,并存储在 data\IBM_TECHNICAL_SUPPORT 目录中。NSD 日志文件的文件名中带有一个时间戳,展示了 NSD 是何时生成的。例如Nsd_W32I_KIRANTP_2006_01_17@17_17_18.log表示这个 NSD 是 2006 年 1 月 17 日生成的。NSD 在运行时,会附加到每个进程和线程,以转储调用堆栈。这有助于您确定服务器或工作站崩溃的原因。
NSD 文件的核心是堆栈跟踪部分。这一部分提供代码路径的一个 breakdown,当前存在的进程中的每个线程要遍历该路径,以进入其当前状态。这对于考察服务器上的挂起或崩溃场景非常有帮助。此外,通过检查 NSD 文件,可以找到 Domino data 目录中生成的任何核心文件,并进行基本的分析,以跟踪死去并遗留下核心文件的进程所做调用的最终堆栈。在诸如 Domino 这样的复杂产品中,两台不同服务器上相同类型的动作的堆栈跟踪可以产生不同的结果。
在 NSD 文件中,通过执行对单词 “fatal”、“panic” 或 “segmentation” 的搜索,可以识别失败进程中的可执行部分。找到进程后,我们可以看出谁在它之前,并有望确定崩溃是如何发生的。有时,当 “panic”、“fatal” 都没有找到时,核心转储将包含对函数中 “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 检测到一个内部一致性错误,或者一个可能导致数据破坏或其他问题的条件时,它会立即调用一个名为 Panic 的子例程。这是在代码操作时,用于不断监控代码的关键部分的一种特殊构造。这有助于在问题升级并可能破坏数据之前,尽可能早地捕捉问题。当发生 panic 时,它将导致系统停止(因此可看成是一种可控制的崩溃)。Panics 产生的消息,有时是英语形式的,有时是代码形式的(例如,PANIC: 04:3C)。您可以将该代码提交给 Lotus Software Technical Support,以便进一步故障诊断。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
在 Lotus Notes/Domino 7 中创建邮件策略 下一篇:
专业人士教你设置lotus邮件服务器
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】