服务器挂起与崩溃之间究竟有什么区别?更重要的是,如何修复它们?在本文中,我们将解释如何识别 Lotus Domino 服务器挂起和崩溃,以及如何分析和纠正它们。
Lotus Domino 构建得非常可靠。但是即使构建得再好的产品,也会遇到导致其挂起或崩溃的问题。当出现这样的情况时,您隔离、分析和修复问题的速度越快,您的用户社团就会越快高兴起来并正常运行,您也因而能够更快地返回去考虑别的事情。
本文提供了一些可用于修复 Notes/Domino 问题的思路。我们首先来定义服务器挂起和服务器崩溃之间的区别,以及如何解决每种问题的例子。我们最后将概述该产品的最新版本 —— Notes/Domino 7 —— 中包含的新的故障诊断特性。我们假设您是一名有经验的 Domino 管理员,并且熟悉基本的 Notes/Domino 概念和术语。
何为服务器挂起和崩溃?
在进入技术细节之前,我们首先定义两个常用的术语,即崩溃(crash)和挂起(hang),以确保我们的理解是一致的。
服务器崩溃
Domino 服务器崩溃是这样一种情景,即服务器程序已经终止并且不再运行。您通常可以通过查看崩溃屏幕或者 NSD/RIP 日志文件(取决于您运行的是什么版本的 Domino),来确定服务器终止时所执行的任务。
Domino 服务器崩溃的常见故障现象包括:
Domino 服务器不再运行,但是系统上的其他程序还在运行。
Domino 服务器控制台不出现,即使当任务似乎已加载时。
Domino 服务器已加载,并且没做任何事情就突然死机。
一个 panic 错误出现在控制台上或 Log.nsf 中,并且系统死机。
NSD/RIP 自动运行并生成一个文件,服务器自己死机和/或重新启动。
存在几种不同类型的服务器崩溃。例如一次性崩溃(one-time crash),顾名思义,可能只出现一次,并且不会再次出现。一个导致 Domino 崩溃的进程访问坏内存或已破坏的文档时会出现一次性崩溃。例如,假设位于 Mail.box 中的一个文档已经破坏。当 Domino 路由器访问 Mail.box 想将该文档路由到其目的地时,将产生一个 Domino 服务器崩溃。类似的场景以后可能会出现,也可能不会出现。一般来说,一次性崩溃是最难分析的。
可重复的崩溃(reproducible crash)是一种可通过一系列步骤重复的崩溃。例如一个这样的表单,其中包含一个编码错误的按钮,每当按这个按钮时,都会导致一个可重复的崩溃。
重复的崩溃(Repetitive crashes)按一定的规律发生。它们似乎不与任何特定动作相关,而是发生在每天的相同时间。在这样的场景中,您需要确切地知道,在导致问题的时间段,服务器上在运行什么。例如,假设 Domino 服务器上启用了一个预定的代理,每个月运行一次。该代理可能会导致服务器崩溃。在这样的场景中,首先需要禁用导致问题的代理,然后再检查该代理为什么会导致问题(并修复问题)。
ABEND 是服务器崩溃的一种特殊形态。术语 ABEND 是 “abnormal end” 这两个单词的组合。ABEND 崩溃不产生 RIP 或 NSD 文件。
崩溃的原因如下:
代码中的软件问题(无论是在服务器上还是客户机上)。
数据库中的破坏。
访问 Domino 的第三方应用程序中的软件问题。
内存不足。
定制代码导致的限制操作。
内存泄漏。
未完成的请求。
服务器挂起
Domino 服务器挂起是这样一种场景,即 Domino 服务器仍在运行,但是服务器上的一个或多个任务不响应请求。这些任务可能还是活跃的,但是不在做它们应该做的事情。术语 “挂起” 也定义了一种状态,即当计算机程序不按设计运行时可能会出现的状态。大部分时候,出现挂起是因为,低级循环或资源的持久不可用导致严重的性能问题。服务器挂起通常归因于资源问题,所以有时可把它们看成性能问题。
在挂起期间,程序看起来像已瘫痪,也不显示错误消息,并且屏幕冻结或者应用程序不响应用户的动作。键盘输入或鼠标点击没有反应,不管光标置于何处都一样,但是程序仍在运行。与 ABEND 或崩溃不一样,挂起有时会自己解决问题,应用程序继续其正常的执行过程,无需您的干预。这样的情况更应该看成是性能问题,而不是挂起。
Domino 服务器挂起的故障现象包括:
Domino 仍在运行,但是不响应客户机。在这种情况下,用户通常报告说他们收到 “Server not responding” 消息。
控制台的行为就像是断开连接的,不接受任何命令,甚至像 quit 这样简单的命令也不接受。
客户机对服务器的访问(例如,打开数据库)感觉到响应时间慢。
出现信号量超时。“show stat” 命令将报告信号量超时信息。下面是 Statrep.nsf 中报告的一个信号量超时的例子:Sem.Timeouts = 430D: 58 0A13:42 030B:28 0116:26 0A12:21。在这个例子中,430D 是信号量名称,58 是超时的数量。注意,信号量超时并不一定表示性能问题。在忙碌的服务器上出现信号量超时是很常见的。如果服务器上没有出现任何信号量超时,统计数据 Sem.timeouts 就不会出现在 Statrep.nsf 中。
会报告与性能相关的错误消息,比如:
Insufficient memory.
Insufficient memory. NSF Folder Pool is full.
Maximum number of memory segments that Notes can support has been exceeded.
Network operation did not complete in a reasonable amount of time.
Server not responding.
注意,在服务器挂起场景中,NSD/RIP 是不会自动生成的。
导致服务器挂起的原因包括,资源问题(资源不足)、第三方应用程序冲突和硬件问题。一般来说,服务器挂起比服务器崩溃更难分析。最后指出一点:崩溃和挂起不只出现在 Domino 服务器上,也可以出现在 Notes 客户机上。
