标签存档: notes.ini

在 NSD 中查看 LotusScript 的调用堆栈

通过添加以下 Notes.ini 参数,可以抓取 LotusScript 的调用堆栈,帮助我们分析宕机等问题:

DEBUG_LS_DUMP=1

结果格式如下:

LotusScript Call Stack
<@@ ------ LotusScript Interpreter -> Call Stack for [ nlnotes:  0ef8:  1494]  (Time 10:38:14) ------ @@>

[3] COUNTVIEWS
[2] GETDBINFO @ line number 7
[1] COUNTDOCUMENTS @ line number 12
[0] INITIALIZE @ line number 2

请参考:Examining LotusScript call stack after a crash or hang with NSD

通过服务器命令批量拷贝数据库

首先在控制台输入以下命令,启用额外的数据库拷贝命令(不是群集也可以用):

set config CLUSTER_ADMIN_ON=1

无需重启服务器,以下命令就可以用于拷贝数据库了:

CL copy serverA!!db1.nsf serverB!!db2.nsf(将 serverA 上的 db1 新建拷贝到 serverB 的 db2)

CL copy serverA!!db1.nsf serverB!!db2.nsf REPLICA(将 serverA 上的 db1 新建副本到 serverB 的 db2)

CL copy serverA!!db1.nsf serverB!!db2.nsf TEMPLATE(将 serverA 上的 db1 新建拷贝为模板到 serverB 的 db2,不含文档)

CL copy db1.nsf db2.nsf(将 db1 从当前服务器新建拷贝到 db2)

将各个拷贝数据库的命令写成一个文本文件copydb.txt,保存到服务器的程序目录:

CL copy db1.nsf bak/db1.ntf TEMPLATE

CL copy db2.nsf bak/db2.ntf TEMPLATE

然后在服务器控制台输入:

< copydb.txt

就完成了批量备份数据库设计为模板库的工作。

请参考:Cluster_admin_on

nsd.sh 导致 cpu 100%占用

今天我们的 Linux 测试服务器突然开始响应缓慢,而前几天都还是好的。连到服务器上发现 cpu 占用一直是100%,而占用的进程是很多个 nsd.sh。最终通过搜索技术支持网站找到原因:Domino 数据目录下有不符合命名规范的数据库(如“~”、“/”、中文字符等)。解决方法如下:

  1. 重命名不符合规范的数据库文件
  2. 添加 notes.ini 参数 DISABLE_SAVENSDCONFIG=1

请参考:Multiple nsd.sh processes running causing high cpu usage

更改 Domino 生成 HTML 页面的 DOCTYPE

我们知道所有的浏览器都有怪癖模式(Quirks Mode)和标准模式(Standards Mode)。怪癖模式是为了兼容老旧的网页,去模拟早期浏览器(如 IE5.5)的非标准实现;而标准模式会尽可能的按照标准去执行。而激活不同模式的关键正是 HTML 页面的 DOCTYPE。

现在已经是 2010 年了,可是 Domino 生成的默认的 DOCTYPE 还是:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

在目前所有流行的浏览器下它都会触发怪癖模式。所以我们需要以下 Notes.ini 参数来改掉它:

DominoCompleteDoctype = 0 或 1 或 2

0 = !DOCTYPE HTML PUBLIC “W3CDTD HTML 4.01 TransitionaEN”
1 = !DOCTYPE HTML PUBLIC “-W3DTD HTML 4.01 TransitionalEN” “http://www.w3.org/TR/html4/loose.dtd
2 = !DOCTYPE HTML PUBLIC “W3CDTD HTML 4.0EN” “http://www.w3.org/TR/html4/strict.dtd

我们只是想要触发标准模式,那么用 1 就可以了。不过由于是通过 Notes.ini 修改的,肯定会影响到所有的表单,想要更改个别的表单可以使用 $$HTMLFrontMatter 域。

参考链接:Working with the DOCTYPEHTMLOptions and HTMLTagAttribute fields用doctype激活浏览器模式

为 Java 代理设置编译器的”-target”参数

从 8.0 版开始,出于对旧版本兼容性的考虑,在 Designer 中编写 Java 代理时,编译器会生成与 Domino 6(JVM 1.2) 兼容的 class 文件。我们可以通过以下 Notes.ini 参数来修改它(以 1.5 为例,重启客户端生效):

JavaCompilerTarget=1.5

对于兼容版本的设定,这里有个权衡需要把握:版本设定的越高可用的新特性越多,但同时能够兼容的 Domino 版本越少。大家可以按照实际需要,参考下表来选择。

JavaCompilerTarget=
等同的 javac 参数
兼容的 Notes/Domino 版本
1.1
-source 1.3 -target 1.1
N/D 5.0 及以上
1.2
-source 1.3 -target 1.2
N/D 6.0 及以上
1.3
-source 1.3 -target 1.3
N/D 6.0 及以上
1.4
-source 1.4 -target 1.4
N/D 7.0 及以上
1.5
-source 1.5 -target 1.5
N/D 8.0 及以上
1.6
-source 1.6 -target 1.6
N/D 8.5 及以上
CurrentJavaVersion
(取当前版本 Notes 附带的 Java版本,以 N/D 8.5 为例,此值等同于 1.6)
-source 1.6 -target 1.6
N/D 8.5 及以上

参考链接:JavaCompilerTarget

禁用 Domino HTTP 服务器的 Trace 方法

在最近客户提交的一份安全检查报告中,有一条是检测到 Domino HTTP 服务器启用了 Trace 方法,可能存在安全漏洞。虽然在 IBM 技术支持文档中宣称此处不存在安全漏洞,但也提供了禁用它的方法:

  • 使用了 Internet 站点配置:在站点配置文档的配置标签页中,禁止 Trace 方法
  • 未使用 Internet 站点配置:在 Notes.ini 中加入一行 HTTPDisableMethods=TRACE

请参考:How to enable or disable HTTP methods

通过 Notes.ini 参数禁用 xPage 功能

Domino 8.5 版引入了新的设计元素:xPage。我承认这是个很强大的东西,但在很多生产服务器我们还没有用到它。而我向来有关闭这种不使用的功能的洁癖,所以通过以下参数可以将其禁用:

INOTESDISABLEXPAGECMD=1

设置参数后重启 HTTP 服务即可生效。

记录 Web 代理的执行

在开发过程中我们经常使用 msgbox 语句来调试代理,由于种种原因有时这些调试语句会被带入测试/生产环境。这种问题一旦发生,一般来说很难定位它究竟来自哪个代理。

此时我们可以在 notes.ini 中添加

AgentThreadDebug=1

参数来打开 Web 代理调试功能,在代理开始和结束时,控制台会打印出代理的名称、所在数据库以及 thread id。有了这些信息,我们就很容易定位调试语句的来源了。

请参考:Lotus Notes.ini Entry – AgentThreadDebug

Domino 中的视图和索引器任务

视图在 Domino 环境中起着重要的作用,它将文档按照定义好的方式组织起来,作为展现给用户的数据或者查找数据的索引。而保持视图中的数据随时更新,是由一个重要的服务器任务:索引器(Indexer)完成的。

索引器任务由 Update、Updall(Update all)两个任务组成,它们通过调用 Notes Index Facility (NIF) 和 Full-Text services,保持各视图和全文索引内容为最新。本文仅讨论视图和索引器任务相关的部分,全文索引相关内容并未涉及。

Update 任务默认写在 Notes.ini 文件的 ServerTasks 参数中,所以它是随服务器一起启动的,持续不断地运行,检查其工作队列以查找需要更新的视图和文件夹。Update 保持两个工作队列:一个即时队列,一个延迟队列。其他服务器组件,例如路由器(Router)和复制器(Replicator),在数据库发生修改时将请求投递给 Update 任务。有些请求投递为延迟,有些请求投递为即时。此请求只包含数据库的完整路径,不包含视图名。延迟队列请求在被处理之前会保持 15 秒,以便在此时间内更新同一数据库的请求作为重复请求而被忽略,通过统一处理来提高性能。这个 15 秒的延迟时间可以通过 Update_Suppression_Time 参数修改。

工作队列中记录了哪些数据库需要更新索引,那么数据库中的具体哪个视图需要更新呢?在数据库的头信息里面,记录了数据库的修改时间;同时在视图的索引信息里面也记录了上次更新索引的时间。通过比较两个时间就可以判断哪些视图需要更新。

Updall 与 Update 类似,但它不是持续不断地运行,也不使用队列;而是根据需要运行。默认情况下,Updall 包括在 NOTES.INI 设置 ServerTasksAt2 中,因此它在每天凌晨 2 点运行。在运行 Updall 时您可以指定选项,但是如果不指定这些选项,则 Updall 会更新服务器上所有数据库中,需要更新的任何视图索引或全文搜索索引。为节省磁盘空间,Updall 还从数据库中清除删除存根(deletion stubs ),并删除符合条件视图的视图索引。

在视图属性的高级页签中,有两个和索引相关的选项:刷新、废弃。先看看刷新选项:

  • 第一次使用后自动刷新
    新建视图时的默认选项,也是一个功能和性能比较均衡的选项,无特殊情况下推荐使用。在用户第一次访问之前,索引器不会更新它,减小了无用视图对性能的影响。用户第一次访问时建立视图索引,所以这次访问会比较慢。不过一旦索引建立起来,索引器就会负责更新它,从而保证用户访问时无需等待。
  • 自动刷新
    与上一个类似,只是不管用户是否使用过它。这个选项对于用户的体验是最好的,因为打开视图时一般来说无需等待就能查看最新的数据;但对服务器来说压力是最大的,因为即使视图从没有人使用过,依然需要更新它的索引。情谨慎使用。
  • 手工刷新
    索引器不更新视图索引,完全依赖用户手工操作,对于服务器来说压力最小。用户打开视图时没有任何延迟,但是看到的数据可能不是最新的。此情况下视图左侧会显示刷新图标,提示用户数据并非最新的,用户点击图标或者按 F9 刷新数据。但对于浏览器应用来说,没有任何方式可以触发索引更新,所以无法使用。
  • 间隔 n 小时自动刷新
    手工刷新和自动刷新的混合体。如果距上次更新索引的时间超过了 n 小时,与自动刷新类似;反之与手工刷新类似。用于可预知更新频率的视图,比如每天晚上定时任务会创建文档,则可以设定为 24 小时刷新一次。

废弃选项:

  • 如果闲置 45 天
    45 天内没有任何用户访问此视图,则删除其索引。可以通过 Default_Index_Lifetime_Days 参数修改。
  • 每次使用后
    用了就删,下次用再重新创建。此方式对服务器压力会很大,一般很少用到,除非真的几乎是一次性使用。
  • 如果闲置 n 天
    与第一个选项类似。

请参考:The Indexer and Its FunctionalityThe basics of Notes view index refreshingUpdall switches, Update and NIF – Notes indexing basicsIndexer tasks: Update and Updall

两个常用 POP3 相关的 Notes.ini 参数

  • POP3MarkRead=2
    缺省地,通过 POP3 接收的邮件在 Notes 仍然是未读,添加此参数可以将 POP3 接收的邮件标记为已读。
  • POP3_READ_ALL=1
    缺省地,一个 POP3 的客户端是不能接收在这个邮件库中已经被 Notes 客户端读过了的邮件。添加此参数可以让 POP3 的客户端 忽略邮件的已读或未读状态,以使得它能接收所有的邮件。需要重启 Domino 服务器生效。