近来有客户反映,在执行我的某程序时,服务器会失去响应数分钟之久,十分影响广大web用户的访问,成为名符其实的害群之马 -_-b。
该程序主要原理是递归一下names.nsf,按照部门结构输出人员层级XML文件。这程序原来在测试环境中运行,最多几秒钟就执行完毕,现在怎么会相差这么多呢?上午研究了一下用户环境,发现了问题所在——数据量的差异。
原来测试环境最多3级部门结构,每个层级内部门数不超过4,5个,人员最多也就几十人。而用户环境有5级部门结构,仅一级部门就将近40个,系统人员更是近千人。这样一来,程序的执行时间便呈几何级数增长,难怪用户会牢骚满天了。
问题找到后,解决起来就容易了。因公司不允许更改names.nsf设计,无法通过建立视图的方法提高搜索速度,只好在代码中每次递归前加入sleep,强行休眠几十毫秒,这样CPU一来就有空闲时间去响应其他web用户的访问请求了。
以下服务器设置必须更改:
Internet协议 - Domino Web引擎 - 是否同时运行 Web 代理? 此项设置必须设置为启用,否则sleep的时间越长,另外的请求等待的时间也就越长了。另外,代理管理器中,同时运行的代理数也要更改为大于1的数字。
PS:以前总有个印象,Sleep不能用在B/S中,今天看了一下Designer帮助,没发现这个限制。莫非Domino6去掉了这个限制?老了老了,糊涂了……