Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->企业应用 ->Lotus Notes ->正文

故障诊断 Lotus Domino 的挂起和崩溃

来源:Linuxdby.com 作者:Webmaster 时间:2007-05-31 点击: [收藏] [投稿]

  故障诊断

  在本节中,我们来看一些用于故障诊断服务器崩溃和服务器挂起的一般方法。

  故障诊断 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邮件服务器

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号