IBM Support

“警告:无法记录事件 - 跟不上事件发生频率!”("Warning: Cannot record event - cannot keep up with event occurrence rate!)

Technote (FAQ)


疑问

偶尔,在 Domino 服务器控制台上频繁显示以下信息:

Warning: Cannot record event - cannot keep up with event occurrence rate!
“警告:无法记录事件 - 跟不上事件发生频率!”

在 log.nsf 的“其他事件”视图中并不显示以上提示信息,而在设置了 notes.ini 参数 debug_outfile 时会输出到指定的路径,或者在 Unix 平台设置了重定向控制台输出时也会显示以上提示信息。

可以通过在 Domino 服务器控制台输入 "load event" 命令启动 Event Monitor (事件监视器)任务,或者在 notes.ini 的 "ServerTasks" 行加入 "event"。 一旦 Event Monitor 任务启动,会按照 events4.nsf 的设置对服务器上发生的事件进行处理。其他的 Domino 服务器进程在生成事件时,如果存储未处理事件的内存缓冲池已满,则会显示上述提示信息。


答案

最根本的问题是:此服务器的 Event Monitor(事件监视器)进程过于繁忙或者服务器本身过于繁忙。下列措施之一可能会解决此问题:

  • 解决服务器的问题。如果在某些时候(如:服务器启动时或者按日执行定时代理时),某些服务器进程报告很多错误,短时间内出现大量的错误信息将会加重事件处理机制的负担。
  • 减少服务器上的 Event Notification (事件通知)数目。如果每个事件了对应多个操作,事件可能不会被很快清除。无论如何,如果管理员对于这些严重程度较低的事件熟视无睹,那么请您不要设置事件通知。
  • 如果频繁调用通知,不要使用代价更高的通知方法。运行程序代价很高,而传送到另一台服务器需要通过网络传输,因此代价也很高,您可以使用代价更低的通知方法,比如记录到数据库。
  • 分散服务器上的事件通知负载,对应每种类型通知都用一个线程处理。
  • 减少服务器上运行的 Monitor(监视器)和 Probe (探针)数量,他们可能会生成更多的事件。
  • 对于大量的同类事件,延长暂停时间,这样不会每当事件发生都触发事件通知。
  • 通过标准方法提高服务器的性能 - 通过有效的性能管理方法,关闭多余的进程,增加内存,重新整理磁盘等等。服务器过载的原因之一可能正是事件监视。

  • 减少服务器上的记录数,写入“其他事件”视图的每条消息都是一个事件,会被写入 Event Pool (事件池),然后由 Event Monitor 任务检查在 events4.nsf 中记录的事件类型与严重程度级别能否导致事件通知触发。即使这些消息并没有触发事件通知,也可能触发“不能记录事件”消息。


大量重复的事件通知最值得被检查。每种类型通知的线程内置有延迟时间以避免阻塞通知信道,并释放服务器资源完成其他任务。记录到数据库、邮件、广播、中继到其他服务器和运行程序等通知类型都要等待 0.1 秒再发送下一条。寻呼、记录 Windows 事件日志和记录 Unix 系统日志等通知类型则要等待 0.5 秒再发送下一条。这意味着每台服务器每秒只能处理从一条到10条不等的事件通知。要检查通知处理的速度,请完成以下操作:
  • 在记录事件的数据库中,将事件发生的时间与文档创建的时间进行比较
  • 改变事件通知类型,不再设置“运行程序”而选择能够记录时间戳的其他事件通知类型,这样你可以检查事件执行前的延迟。


上述方法的示例步骤如下。为了将某个事件放入队列,Event Manager(事件管理器)所需的内存大小存在差别,但是必须包含所有被写入 statrep.nsf 中的事件信息的全部内容。这些文档的大小从 100 字节到 200 字节不等,您可以参考此数值进行估算。对于每个事件,从事件发生到被事件管理器查询,再到事件通知被服务器处理,都需要占用相同的内存。
  • 在 Domino 控制台执行命令 "tell event dump" 检查分配的 Event Memory 大小及使用情况。
  • 设置 notes.ini 参数 Event_Pool_Size ,增加用于缓存事件的队列占用的内存大小。
  • 设置 notes.ini 参数 Debug_Event=1,检查用于缓存服务器标准通知设置的 Event Pool 的大小。
  • 在出现问题时,使用 Debug_Event=1 参数检查事件产生的原因和服务器上的通知事件。

作为最后一件武器,只有在上述方法都已被使用,系统事件负载也已经降低之后,标准的内存泄漏诊断技术才会被应用于分析 Event Pool 问题。Event Pool 在事件频繁发生时会增长,在事件通知堆积时会增长的更快。在度过高峰之后,Event Pool 内存区块可能不会被释放,但是内存可以被用于其他事件队列和事件通知。因此 Event Pool 看起来像是发生了泄漏,而实际上是由于服务器遇到事件爆发时,来不及处理队列中的事件通知。

在 Domino 服务器执行 memory dump (load server -m),或者带 Memcheck 参数运行 NSD 。(在 Unix 系统上必须安装 Memcheck,在 Windows 平台上必须带 Memcheck 参数运行 NSD。在遇到疑似内存泄漏问题时,请向 IBM 技术支持求助,他们会提供相关的工具说明。)

在启动 Event Manager 之后,如果看到 "Cannot record event" 消息,请执行 "tell event dump" 查看内存统计信息以判断 Event Pool 内存池的使用情况,而不是仅根据分配的 Event Memory 内存池大小来判断。提供服务器端的 events4.nsf 拷贝,以及记录事件的数据库拷贝。数据库拷贝必须在操作系统级别完成,这样可以保留文档的时间戳,或者是完整副本的操作系统级别拷贝。在报告问题时,包含问题描述 以及您根据本文列出的诊断方法执行命令,得到的输出结果,这将有助于分析服务器是否能跟得上事件发生以及事件通知被触发的频率。

技术支持信息:

通过数据库中的文档的文档属性,可以检查事件通知是否被延迟记录到数据库中,以下示例取自 statrep.nsf ,毫无疑问,当时系统负载过大。事件实际发生事件是 1:08:30,但是却是在 3 秒以后被记录到同一台服务器的数据库中



下面列出的例子中,事件通知被配置用于运行一个程序,程序很简单,但会在日志中记录时间戳,这样我们可以分析从事件放入队列到完成通知事件(被从队列中取出)再到调度并运行程序等待的时间长短。在特定的服务器上,可以在其他时间或者不同的负载条件下进行尝试。

    02/13/2001 11:44:34 AM Periodic full text indexer not started - Incorrect argument count
    (定期全文索引未启动 - 参数数量不正确)




    Domino 控制台命令可用于检查分配给事件队列的内存块大小和使用情况。调试会被输出到控制台,而不会被写入日志文件。要观察输出的信息,请查看服务器控制台,或者按照后面的描述 Debug_Event=1 添加调试参数。

    > tell event dump

    Event pool size = 106496 bytes, used = 94810 bytes

    ACLWatchCount: 1
    DbName Severity Monitor #
    names.nsf 3 AAAA-4TQ4GA
    Replication Monitors Cached: 1
    DbName Interval Severity Next Check Time Monitor #
    names.nsf 24 3 02/13/2001 10:40:23 AM AAAA-4TQ4GB
    No file check parameters to dump
    No server access check parameters to dump

    Event_Pool_Size 参数

    Event_Pool_Size 在 Domino R5 和 R6 缺省大小及上限都是 5242880 (5 MB),即队列中未处理的事件、未处理的通知、暂停执行事件占用内存的上限。参数设置如:Event_Pool_Size=5242880

    当判断是否由于事件发生过于频繁或发生内存泄漏时,检查 Event_Pool_Size= 参数。确保这个参数被设为最大值,这样可以使 Event Monitor 能够应对负载瞬间猛增的场景。如果事件数量,事件通知数量,服务器负载或服务器的性能问题持续,而 Event Monitor 无法应对又或者产生了 Event Pool 内存泄漏,就不可避免的会发生本文最初描述的问题。如果有帮助,则会给我们争取了一些时间来实施上述步骤。

    改变此参数的值需要关闭并重新启动服务器,或执行 "restart server" 命令。具体的说,需要释放 Domino 共享内存,而 Event Pool 是 Domino 共享内存中的一部分。这意味着,所有的 Notes 客户端、Domino 服务器任务或者启用 Domino API 的第三方应用,只要在使用同一个 Domino 数据目录,就必须被关闭并重新启动。如果正在运行多个第三方应用(如 Windows 服务),最好关闭并重新启动操作系统。

    在 AIX 或者 i 系列小型机操作系统,如果设置参数时使用了逗号作为千位分隔符,如: Event_Pool_Size=5,242,880 可能会导致 HTTP 任务无法启动。在设置此参数时,请勿使用逗号作为千位分隔符。

    在 Domino 7, 8, 9 及更高版本,Event_Pool_Size 的最小值、缺省值、最大值都发生了变化,具体的值是:

    缺省: 10 MB (10485760 字节)
    最小: 5 MB
    最大: 100 MB (104857600 字节)

    Debug_Event=1

    将输出大量的调试信息,显示所有在 Event Monitor 启动时加载的事件通知。显示 Event Pool 占用的内存大小以及哪些事件正在服务器上被生成。你必须通过控制台捕捉输出,而不会写入log.nsf 数据库。如果你在 Unix 操作系统上运行 Domino ,使用 "tee" 或其他工具重定向控制台输出,则会捕捉到输出的调试信息。如果没有,你可能会使用 "Debug_Outfile" 参数指定输出日志的路径。如果你还在寻找事件的来源,可能要再加入 "Debug_Threadid=1" 参数以定位发起事件的进程和线程编号。

    在服务器运行时,你可以执行以下命令查看用于在 events4.nsf 存储监视和通知配置信息所需内存的大小。
    tell event quit (关闭 Event Monitor 任务),
    set config Debug_Event=1 (设置调试参数)
    load event (开启 Event Monitor 任务)

    输出的信息,例如:
    "Event pool size = 90112 bytes, used = 84214 bytes" (Event pool 分配的内存大小为 90112 字节,其中84214 字节已用)

    恢复默认设置并重启:
    tell event quit
    set config Debug_Event=
    load event

    以下是添加调试参数 Debug_Event=1 与 Debug_Threadid=1 后的输出样例,您可以看到缺省的 events4.nsf 配置与其他发起 "Cannot record event" 消息的事件的线程。 Event_Pool_Size 被人为的限制住,Agent Manager的消息被添加到 events4.nsf.
      [040C:0002-03FC] 02/07/2001 12:35:07 PM Event Monitor started
      [040C:0002-03FC] EVENT: Closed Config DB
      [040C:0002-03FC] EVENT: Reopening Config DB Without SCANLOCK
      [040C:0002-03FC] TYPE+SEVERITY: Comm 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Comm 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Comm 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Security 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Security 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Security 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Mail 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Mail 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Mail 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Replica 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Replica 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Replica 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Resource 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Resource 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Resource 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Misc 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Misc 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Misc 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Server 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Server 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Server 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Statistic 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Statistic 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Statistic 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Update 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Update 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Update 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: DataBase 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: DataBase 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: DataBase 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Network 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Network 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Network 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Compiler 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Compiler 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Compiler 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Router 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Router 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Router 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Agent 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Agent 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Agent 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Client 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Client 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Client 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Addin 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Addin 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Addin 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: AdminP 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: AdminP 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: AdminP 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Web 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Web 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Web 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: News 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: News 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: News 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Ftp 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Ftp 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: Ftp 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: LDAP 1 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: LDAP 2 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] TYPE+SEVERITY: LDAP 3 Log statrep.nsf No Schedule A1/Test
      [040C:0002-03FC] Event pool size = 65536 bytes, used = 62080 bytes

      [040C:0002-03FC] ACLWatchCount: 1
      [040C:0002-03FC] DbName Severity Monitor #
      [040C:0002-03FC] names.nsf 3 AAAA-4TPU8X
      [040C:0002-03FC] Replication Monitors Cached: 1
      [040C:0002-03FC] DbName Interval Severity Next Check Time Monitor #
      [040C:0002-03FC] names.nsf 24 3 02/07/2001 12:35:08 PM AAAA-4TPU8Y
      [040C:0002-03FC] No file check parameters to dump
      [040C:0002-03FC] No server access check parameters to dump

      .....
      > l amgr

      [060C:0002-03DC] 02/07/2001 12:36:12 PM AMgr: Executive '5' started
      [040C:0002-03FC] Looking up error code AGENT MANAGER0x3345
      [01EC:0002-03D0] 02/07/2001 12:36:12 PM Agent Manager started
      [040C:0002-03FC] Looking up error code AGENT MANAGER0x3314
      [039C:0002-01CC] 02/07/2001 12:36:13 PM AMgr: Executive '2' started
      [04A4:0002-0454] 02/07/2001 12:36:13 PM AMgr: Executive '3' started
      [04B8:0002-0570] 02/07/2001 12:36:13 PM AMgr: Executive '4' started
      [0494:0002-0528] 02/07/2001 12:36:13 PM AMgr: Executive '1' started
      [040C:0002-03FC] Looking up error code AGENT MANAGER0x3345

      .....
      > tell amgr q

      [0494:0002-0528] 02/07/2001 12:41:18 PM AMgr: Executive '1' shutting down
      [039C:0002-01CC] 02/07/2001 12:41:18 PM AMgr: Executive '2' shutting down
      [04A4:0002-0454] Warning: Cannot record event - cannot keep up with event occurrence rate!

      [04A4:0002-0454] 02/07/2001 12:41:18 PM AMgr: Executive '3' shutting down
      [04B8:0002-0570] Warning: Cannot record event - cannot keep up with event occurrence rate!

      [060C:0002-03DC] 02/07/2001 12:41:18 PM AMgr: Executive '5' shutting down
      [04B8:0002-0570] 02/07/2001 12:41:18 PM AMgr: Executive '4' shutting down
      [040C:0002-03FC] Looking up error code AGENT MANAGER0x3346
      [01EC:0002-03D0] 02/07/2001 12:41:19 PM Agent Manager shutdown complete
      [040C:0002-03FC] Looking up error code AGENT MANAGER0x3315


      附加的调试参数
      以下调试参数可以被用于列出在队列中等待的每种类型的消息:

      在控制台执行 "tell event queuedump event.dmp"
      这将显示每种类型的消息在队列中等待的数目有多少。在以下案例中,问题出在 probemgr 。在一个客户案例中,这种方法辅助解决了问题。

      Sample output:

      Event pool size = 10530366 bytes, used = 9668394 bytes
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - HTTPQueue
      Process ID - 776 (External)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - EventDispatcher
      Process ID - 1952 (Event Task)
      Message count - 1
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - EVENTLOG
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - LOG
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - MAIL
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - BROADCAST
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - RELAY
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - ACLWATCH
      Process ID - 1952 (Event Task)
      Message count - 0
      Signature - 0x0000DADA (Valid)
      *********************************************************
      Queue Name - PROBEMGR
      Process ID - 1952 (Event Task)
      Message count - 18715
      ------------------------------------------

      相关信息

      How Should the DEBUG_OUTFILE Parameter Be Implemented?
      Is the notes.ini parameter debug_threadid dynamic?
      How Is a Memory Dump Taken?
      Memcheck memory analyzer
      An US English translation is available

      Document information

      More support for: IBM Domino
      Administration

      Software version: 7.0, 8.0, 8.5, 9.0

      Operating system(s): AIX, Linux, Solaris, Windows

      Reference #: 1693918

      Modified date: 05 January 2015