Domino 服务器建议–服务器稳定性篇IBM 协作解决方案技术支持团队 2014.3
经过分析2013年发生过的所有Domino服务器稳定性问题(宕机、挂起、内存不足等),我们发现并总结了常见的由于版本老旧,配置错误等原因引发的问题。这些原因在生产中都属于可避免的原因。广大管理员可以根据这个列表,检查服务器的版本以及配置,并及时更正,从而避免一些影响生产环境稳定性的故障。
内容目录
服务器版本..................................................................................................................................2
服务器配置..................................................................................................................................2
1.配置位置:Domino服务器的启动方式.................................................................................2
2.配置位置:服务器地址本(names.nsf) - 服务器文档 - Internet 协议 - Domino Web 引擎 - "是否并发运行Web代理和Web Service.".............................................................................3
3.配置位置: Notes.ini 参数 HTTPJVMMAXHeapSize=nnn,HTTPJVMMaxHeapSizeSet=1,JavaMaxHeapsize=nnn......................................................3
4.配置位置: Notes.ini 参数 NSF_BUFFER_POOL_SIZE_MB.............................................4
5.配置位置:Notes.ini参数 FTG_ENABLE_GTR_KEY_CHECK=1......................................4
6.配置位置:Notes.ini 参数 NSF_BACKUP_MEMORY_CONSTRAINED=1 以及NSF_BACKUP_MEMORY_LIMIT=nnn..................................................................................5
7.配置位置: Notes.ini 参数 TCP_QLENGTH........................................................................5
8.配置位置:Notes.ini 参数 POP3_Session_Timeout............................................................6
其他建议......................................................................................................................................6
1.定时重新启动服务器.............................................................................................................7
2.避免在生产时间大规模执行数据库维护动作........................................................................7
3.监控log.nsf的大小...............................................................................................................7
4.管理群发的邮件....................................................................................................................8
5.故障恢复以及数据收集方法..................................................................................................8
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第1页
Domino 服务器建议 – 服务器稳定性篇
服务器版本
Domino的版本有三个级别,第一个级别叫做code stream,即大版本的升级,比如8.x,8.5.x,9.x,这个版本级别主要升级功能;第二个级别叫做维护版本(Maintenance Release),比如8.0.2,8.5.3这样的版本,这个版本修复已知的产品问题,有时会提供一些新功能;第三个级别叫做补丁包(Fix Pack),比如8.5.3FP6,主要解决影响严重的产品问题。三个级别发行的速度由慢到快。
通常我们的建议是及时更新补丁包,定期安排更新维护版本,统筹计划大版本升级。
在实际中,统计所有通过服务器版本升级解决的稳定性问题,用户选择安装补丁包解决的比例为27.6%;用户选择安装维护版本修复的比例为55.2%;用户选择通过升级code stream解决的比例为17.2%。
可见如果可以及时安装补丁包,可以避免20%以上的稳定性问题。
服务器配置
Domino服务器的配置比较灵活,带来方便的同时,也带来了复杂度。对于配置的错误而引发的服务器稳定性问题是可以避免的,下面列出了在过去一年中遇到的经常被设置错误的配置,我们给出了配置的解释,参考配置以及参考文档。
1.配置位置:Domino服务器的启动方式
配置解释:当在远程会话中启动Domino服务器时,需要使用正确的方式做后台启动。否则,如果将服务器启动在前台,同时关闭了远程会话(如Telent, SSH),Domino服务器的主进程server会丢失父进程而成为僵尸进程,导致服务器挂起或者宕机。
参考配置:请参考下面文档中的启动方式,启动服务器。对于使用自定制脚本启动Domino服务器的用户,请检查启动脚本中的启动命令是否是正确的后台启动方式。
Title:Exiting a Telnet Session Hangs a Domino Server on UNIXDoc #:1085321URL:http://www.ibm.com/support/docview.wss?uid=swg21085321
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第2页
Domino 服务器建议 – 服务器稳定性篇
2.配置位置:服务器地址本(names.nsf) - 服务器文档- Internet 协议- Domino Web 引擎- "是否并发运行Web代理和Web Service."
配置解释:这个配置是一把双刃剑。当配置为启用时,HTTP进程会允许Web 代理或者Web 服务并行运行,会极大提高HTTP代理的运行吞吐能力。但是,用户需要注意保持自己应用程序的线程安全。即多个线程访问共享资源时,做好并发保护,否则会出现内存复写的情况而引起服务器宕机。
参考配置:(在用户应用程序线程安全的前提下)启用
参考文档:
Title:关于在同一时间运行多个Web代理或Web服务Doc #:1603454URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21603454
3. 配置位置:Notes.ini 参数HTTPJVMMAXHeapSize=nnn,HTTPJVMMaxHeapSizeSet=1,JavaMaxHeapsize=nnn
配置解释:这些参数设置了Domino服务器各个进程中内嵌的Java虚拟机堆内存大小。其中 JavaMaxHeapsize=nnn 设置了所有JVM的最大堆大小,HTTPJVMMAXHeapSize=nnn同HTTPJVMMaxHeapSizeSet=1一起使用,用于单独设置HTTP进程的JVM 堆大小。
用户需要考虑在Domino中是否使用了Java,常见的使用Java的场景和对应进程包括:
Router 进程 : 邮件到达前代理中使用了Java代码
Server 进程: 在服务器上运行(run on server)的代理中使用了Java代码
Amgr进程: 在定时代理中使用了Java代码
HTTP 进程: 在Web代理中使用了Java代码或者使用了Servlet。
对于Router, Server, Amgr的JVM 堆控制可以通过Javamaxheapsize=nnn来设置,如Javamaxheapsize=67108864 为设置Java堆最大值为64MB。
对于HTTP,如果不做单独设置,则遵循Javamaxheapsize的设置,但由于HTTP通常会更多的使用Java代理,所以,可以使用HTTPJVMMAXHeapSize=nnn同HTTPJVMMaxHeapSizeSet=1来单独设置HTTP JVM的最大堆大小。
设置堆大小时,除了考虑应用程序需要的内存数量,还需要考虑系统能够支持的内存大小。尤其对于32位的Domino服务器。如果设置过大的堆大小,可能会导致进程内存溢出而产生宕
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第3页
Domino 服务器建议 – 服务器稳定性篇
机。
参考配置:
不使用Java时,不需要添加参数,使用默认配置。使用Java时,对于32位Domino服务器,建议在64MB至512MB之间选择,但对于AIX平台上32位Domino服务器,不要超过256MB。对于64位Domino服务器,默认值为1024MB,可以根据物理内存的数量和实际需求再做调整。
参考文档:
Title:Domino 8.5中的notes.ini参数HTTPJVMMaxHeapSize的解释Doc #:1604631URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21604631
4. 配置位置:Notes.ini 参数NSF_BUFFER_POOL_SIZE_MB
配置解释:
NSF BUFFER POOL是Domino用于存放数据库内容的缓存,该缓存帮助Domino减少磁盘的访问而提高性能。更大的NSF Buffer Pool 可以提高缓存命中几率,但如果该缓存过大,会侵占进程内存空间,导致内存不足而引起服务器宕机。所以,设置的思路是选择一个性价比最高的数值。
用户可以通过"show stat" 命令,监控Database.Database.BufferPool.PercentReadsInBuffer 这个性能统计数值,如果这个数值大于90%,则说明NSF Buffer Pool的大小是合适的。
参考配置: 删除参数,使用Domino默认设置(32位Domino服务器的默认大小为512MB,64位平台的默认值为1024MB。)监控Database.Database.BufferPool.PercentReadsInBuffer,并根据服务器性能统计信息,以256M为间隔,增加NSF Buffer Pool,如设置 NSF_BUFFER_POOL_SIZE_MB=768。注意,在32位平台上,最大值不建议大于1024MB。
参考文档:
Title:New default limit on UBM size in Domino 8Doc #:1268988URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21268988
5.配置位置:Notes.ini 参数FTG_ENABLE_GTR_KEY_CHECK=1
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第4页
Domino 服务器建议 – 服务器稳定性篇
配置解释:该参数是SPR#MTMY5J2JX8 提供的一个新增功能,添加之后,Domino会在操作全文索引时进行数据一致性检查,从而避免索引意外损坏引起的宕机
参考配置:如果使用全文索引的功能,建议在服务器的Notes.ini中添加 FTG_ENABLE_GTR_KEY_CHECK=1
参考文档:
Title:Domino服务器在执行全文索引搜索或搜索返回结果太多的时候宕机Doc #:1604761URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21604761
6.配置位置:Notes.ini 参数NSF_BACKUP_MEMORY_CONSTRAINED=1 以及NSF_BACKUP_MEMORY_LIMIT=nnn
配置解释:第三方备份软件在备份Domino数据库时,会调用Domino的API进行读取。在一些情况下,备份软件读取操作占用的内存过多,会影响到Domino服务器的内存使用,导致内存不足的情况。用户可以通过NSF_BACKUP_MEMORY_CONSTRAINED=1 以及NSF_BACKUP_MEMORY_LIMIT=nnn这两个参数,限制备份软件的内存使用,从而避免Domino服务器内存不足。
参考配置:如果使用第三方的备份软件,可以考虑设置NSF_BACKUP_MEMORY_LIMIT 在200MB。如添加如下参数到Notes.ini文件
NSF_BACKUP_MEMORY_CONSTRAINED=1
NSF_BACKUP_MEMORY_LIMIT=209715200
参考文档:
Title:Server crashes due to low memory condition after backup application runsDoc #:1211241URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21211241
7. 配置位置:Notes.ini 参数TCP_QLENGTH
配置解释:该参数通常仅应用于Solaris平台,由于缺省的TCP Queue Length 仅为20,在高峰时间,可能会出现由于无法建立TCP连接而导致的客户端无法连接服务器的情况。
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第5页
Domino 服务器建议 – 服务器稳定性篇
参考配置:首先建议用户升级到8.5.3以上的版本,在这些版本中,该问题已经通过默认值调整解决。对于使用8.5.3之前版本的用户,建议在Notes.ini中作如下的设置:
(Solaris平台)TCP_QLENGTH=512
(Windows平台)TCP_QLENGTH=1024
另外,对于Solaris平台,建议检查下列核心参数并调整为推荐值:
tcp_recv_hiwat 65535
tcp_xmit_hiwat 65535
tcp_conn_req_max_q 4096
tcp_conn_req_max_q0 4096
参考文档:
Title:Notes clients receive "The server is not responding" error or experience slow response after Domino server is upgraded to 8.5.x on Solaris or WindowsDoc #:1469475URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21469475
8.配置位置:Notes.ini 参数POP3_Session_Timeout
配置解释:由于有些POP3客户端在中毒或者异常之后,可能会对POP3 服务器(Domino)发出很多连接,这些连接会占用很多Domino资源,但实际没有任何用途,所以对于使用POP3服务器的用户,建议设置一个相对小的POP3会话超时,这样异常的连接可以在相对短的时间内被Domino服务器断开,从而释放服务器的资源,避免服务器资源不足而宕机或者挂起。
参考配置: 建议设置Pop3会话空闲的超时时间小于5分钟。例如:
POP3_Session_Timeout=2
参考文档:
Title:Domino服务器的POP3任务挂起Doc #:1603740URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21603740
其他建议
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第6页
Domino 服务器建议 – 服务器稳定性篇
除了上述的服务器版本和配置的建议,还有一些不属于上述分类的建议也可以帮助减少服务器稳定性问题的出现,我们统一放在下面。
1.定时重新启动服务器
Domino从设计上本身不需要定时重新启动,但从实际运行中我们发现由一些用户代码带来的内存泄露问题可能会导致服务器在长时间运行后出现内存不足的情况而出现稳定性问题。而对于很多用户来说,分析和查找应用系统的微小内存泄露是相当耗时耗力的,甚至在应用开发商退出后,已经没有人维护应用代码。在这样的情况下,定时重新启动Domino服务器则可以成为一种简单的权宜之计,帮助用户做到保证服务器稳定生产的同时,给最终用户带来的影响最小。
根据生产系统可用性要求,重新启动的间隔可以考虑在每天、每周甚至每月。
2.避免在生产时间大规模执行数据库维护动作
Domino提供了fixup , updall , compact等对数据库维护的命令,来帮助检查和修复结构和数据异常的数据库。这些任务会读取和写入数据库,当对于大量数据库执行时,会消耗比较多的I/O操作。同时,被维护的数据库,由于读写锁的存在,会影响用户请求的响应速度。通常这些任务会在夜晚服务器负载低谷时运行。但我们在实际中发现,很多用户在生产时间有意外执行的数据库维护命令的情况,导致I/O升高,或者应用数据库由于读写锁导致大面积无法响应用户请求的情况。虽然从技术角度看,这并不是服务器挂起,但用户访问已受到影响,也属于服务器稳定性问题。大规模数据库维护通常包括:
•对某一个或者多个目录(如用户邮件数据库所在的目录)进行数据库维护,甚至不使用参数直接对服务器上所有数据库进行维护。
•对某一个或多个主要应用数据库进行维护,特别是在应用数据库容量比较大的情况下(比如大于2G。)。
•对于服务器核心数据库,names.nsf, admin4.nsf, log.nsf等进行数据库维护,尤其在这些数据库容量比较大的情况下(比如大于2G。)
所以,建议管理员注意控制可以执行数据库维护命令的人群,并避免在生产时间大规模运行数据库维护命令。
3.监控log.nsf的大小
在分析中,我们发现有多起故障是由于超大log.nsf引发的。Domino服务器默认会保留7天的服务器日志。在默认的日志输出情况下,log.nsf的大小是很小的。但由于启用了调试参数或者用户应用的输出,可能会导致log.nsf的容量很大,甚至超过10G。这样,一方面日志文件可能耗尽磁盘空间,另外,甚至可能超过文件系统单一文件大小的限制,这都会带来服务器稳定性问题的
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第7页
Domino 服务器建议 – 服务器稳定性篇
出现。
所以,建议管理员可以对log.nsf的大小做一个监控,如果超过预期的数值(比如2GB),则需要人工干预,检查原因并修复。
可以参考下面文档了解notes.ini中log=参数的含义和作用。
相关中文文档:通过 notes.ini 中 log= 参数来限制日志文档的大小 URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21602365
4.管理群发的邮件
大规模的群发邮件,可能会带来邮件服务器负载加重,正常邮件投递缓慢,甚至内存耗尽,导致服务器宕机的情况。使用64位版本可以很大程度上的避免内存耗尽问题,但大规模的群发邮件尤其是垃圾邮件,对生产业务的影响还是存在的。
管理员可以阅读下面文档,之中讲述了如何通过配置,缓解大规模邮件发送引发的性能问题。
Title:在Domino中如何避免大规模邮件发送相关的性能问题Doc #:1605015URL:http://www.ibm.com/support/docview.wss?rs=899&uid=swg21605015
5.故障恢复以及数据收集方法
一旦出现了服务器稳定性问题,Domino首先会尝试自行恢复,但在某些情况下,服务器无法自行恢复时,需要管理员人工干预。我们之前曾经写过一本《Domino系统应急恢复手册》,管理员可以下载并打印备用。如果出现故障,可以根据其中的场景,实施相应处理,恢复服务器正常运行。
手册地址:
http://t.cn/zR5CSWs
或者
https://www.ibm.com/developerworks/community/forums/html/topic?id=e622577d-c736-415b-af04-e4d25c10ac91
URL: https://ibm.biz/BdDJ8J
Copyright IBM Corporation 2013,2014 第8页