对于服务器端应用,维持其服务器应用的高性能和高可伸缩性是非常重要的,性能的不断提升为客户带来新的价值。IBM Lotus Domino 服务器是一个建立在开放、统一的架构之上,集企业级通信、协作、工作流和 WEB 应用功能与一体的软件平台。通过几十年的软件发展,最新的 Lotus Domino 8.5 版本进一步提高了其服务器的的性能以及 Domino 集群的高伸缩性。
在实际应用部署环境中,IBM Lotus Domino 服务器与企业的整体 IT 基础架构和其它企业服务器环境紧密结合。如何通过合理的测试方法和工具来进行有效的性能测试,如何界定当前服务器环境的性能瓶颈并进行性能调优将是非个常关键的问题。对于测能测试,大致上我们需要以下几个步骤来回答上面的问题:
- 定义性能目标。根据实际的系统环境、服务器硬件、系统环境、Domino 应用和服务器用户量等因素,定义一个合理的性能目标。
- 定义一个性能测试场景。场景模拟一定数量的用户通过 Lotus Notes 客户机使用同一个 Lotus Domino 服务器执行特定的动作。用户的动作定义根据实际应用的需求,模拟的用户可以分成几组执行不同的动作。例如普通的 Domino 服务器邮件用户通常执行常见的邮件收发、消息传递和日历操作等行为。
- 准备测试数据。性能测试需要在一定程度的数据量上进行。需要生成测试所需要的动态数据,用户数据等。
- 使用性能测试工具进行性能测试。性能测试工具通过调用特定的场景脚本来模拟多个用户对 Domino 服务器发出调用。 通过持续的,阶段性的增加测试用户使 Domino 服务器承受的压力逐步增加。
- 分析性能测试结果。分析在不同的服务器压力下,服务器的事物响应时间以及各个服务器资源的消耗状况,而且许多性能瓶颈只会在服务器处理高负载时才会显现。
- 进行性能调优。根据发现的性能瓶颈,通过硬件配置更改,系统更改,软件调优等手段更改当前系统的配置。
- 进行迭代式性能测试。对于调优过的系统,要进行迭代式的性能测试。验证性能调优的结果并分析新的性能瓶颈进行调优,直到达到预期的目标。
Lotus Domino 提供了名为 Server.Load 工作负载的基于特性的负载生成工具, 接下来本文将围绕 Server.Load 工作负载工具来阐述对于 Domino 服务器的性能测试。
Server.Load 是 Domino Administrator 的一个组件,在安装 Domino Administrator 时,请选择安装 Server.Load 组件。 Lotus Server.Load 是 IBM Lotus Domino 提供的负载生成工具,测试人员可以使用此工具内建的多种测试脚本测试 Domino 服务器的性能以及请求的响应时间。测试人员也可以自定义测试脚本以满足客户应用的测试需求。Server.Load 可以生成一致的,可重现的负载压力,这样测试人员就可以对运行在不同操作系统,不同硬件环境,不同服务器参数配置的 Domino 服务器性能进行度量,并进行性能调优。 Server.Load 内建了多种性能测试脚本,例如 Notes R5 Database, R5 iNotes, R6 iNotes 等常用的测试案例,这些测试脚本很好的模拟了该场景下 Notes 应用的特点,便于测试人员快速入门,完成性能测试。 更多 Server.Load 的介绍以及使用方法请参考 IBM Lotus Domino Server.Load V8 快速入门指南
- 注册压力测试模拟用户。测试中需要模拟多用户并发操作,所以首先需要在服务器上创建模拟用户。Server.Load 提供了"Create notes Bench Mail Person Documents Agent",该代理会创建一系列的测试用户供测试脚本使用。
设置负载的代理:
图 1. Create NotesBench Mail Person Documents
提示 缺省 创建邮件用户的起始值 1 要创建的用户的数目 1000 要创建的 Mailn.nsf 文件的数目 1000 启动 Mailn.NSF 文件 1 邮件数据库的位置 mail\ 邮件域 缺省值从服务器的邮件域中读取 邮件服务器目录的位置 存储 Domino 目录的服务器的名称 Message storage format 2 (MIME) 邮件系统 1 (NOTES) Internet 主机名 存储 Domino 目录的服务器的主机名
- 创建压力测试模拟用户数据。在压力测试中需要在服务器端创建用户数据,用以模拟真实的服务器案例。Server.Load 提供了多种测试案例的数据创建脚本,例如测试人员可以使用“N8Mail 初始化负载”脚本创建 Notes R8 测试数据。
图 2. N8Mail 初始化负载
- 使用测试脚本进行压力测试。测试人员在完成数据准备之后,就可以运行测试脚本进行压力测试了。下图展示了在 Server.Load 中运行测试脚本的一般过程。
图 3. 设置 N8Mail 负载测试参数
图 4. 设置 N8Mail 负载 Script 变量
图 5. 添加 Script 度量单位
- 收集操作系统监视数据。一般需要在性能测试时监控服务器运行期间 CPU 以及内存的消耗情况。在 Windows 系统下使用 Perfmon,Linux 下使用 nmon,测试人员也可以根据测试案例添加自定义监视计数器。
图 6. 性能监视器
Server.Load 提供了多种测试脚本,用户可以方便的使用这些脚本对常用的案例进行性能测试。同时 Server.Load 也提供了定制脚本的功能,测试人员可以方便的开发适用于各种应用的测试脚本。
- 定制测试脚本
Server.Load 提供了多种场景的测试脚本,覆盖了大部分的典型 Notes 应用。用户基于这些内建脚本,定制适合自己的测试脚本。本文将以脚本“R5 共享数据库”为例介绍定制脚本的方法
在 Server.Load 中选择脚本“R5 共享数据库”,点击"查看 Script"按钮
图 7. 打开内置脚本
清单 1. R5 共享数据库脚本语句分析双星号(**)之间的文本表示注释。 ** 暂停一段随机时间间隔,以便使多个进程适当地错开。暂停 0-5 分钟(5 分钟 = 300000 毫秒)** Pause 0-300000 ** 如果出现错误,等待 1-2 分钟然后重试。** ErrorDelay 60000-120000 BeginCrit ** 创建一个讨论数据库 ** changeto "[MailServer]!![DiscussionDB]" [DiscTemplate] -KeepOpen open ** 通过删除大量现有文档,重置初始文档数目 ** getall @If [NBTestReset] delete [MaxDocToDelete] @EndIf ** 确保在邮件数据库中存在足够的文档(仅一次)** populate [NumMailNotesPerUser] close ** 打开当前视图 ** 打开 ** 关闭该视图 ** close EndCrit ** 开始执行脚本的循环部分 ** BeginLoop ** 打开一个讨论数据库 ** changeto "[Mailserver]!![DiscussionDB]" [DiscTemplate] -KeepOpen ** 打开当前视图 ** open getall ** 从当前视图中读取 20 个文档 ** entries 1 20 ** 等待 5 到 10 秒钟以仔细察看该视图 ** Pause 5000-10000 ** 将该视图向下翻页两次,用 3-10 秒钟阅读各个窗口 ** entries 21 20 pause 3000 - 10000 entries 41 20 pause 3000 - 10000 ** 将未读列表设置为 30 个随机选择的文档 ** unread 30 ** 打开随后 3 个未读文档,每个文档阅读 10-30 秒钟 ** navigate 1 next_unread pause 10000 - 30000 navigate 1 next pause 10000 - 30000 navigate 1 next pause 10000 - 30000 add [DiscDbAddDocRate] 100 ** 在关闭数据库时删除 2 个旧文档 ** close ** 在办公室开会的同时,在桌面暂停 4 到 8 分钟 ** pause 240000 - 480000 ** 再次重复执行整个语句序列(返回到 BeginLoop 语句)** rewind
将脚本全部内容拷贝至文本编辑器中。根据用户需求在脚本中添加自定义命令。本例中将在脚本中添加删除命令。为了模拟用户行为,需要在每个 Notes 命令前添加暂停命令。
图 8. 编辑脚本
将脚本保存为“CustomScript.scr”
图 9. 保存定制脚本
在 Server.Load 测试类型中选择“定制”,并打开“CustomScript.scr”
图 10. 点击定制按钮
图 11. 打开定制脚本
- Server.Load 脚本 API
Server.Load 同样提供了强大的 API,模拟了 Notes 应用的大部分功能,用户可以利用这些函数编写脚本。合理使用这些函数,将会大大提高测试脚本的真实性,也会提高性能分析的有效性。以下将简单介绍一些常用函数。
在 Server.Load 脚本中用于设置要进行测试的当前数据库。提供该数据库的全文件名(如果是远程数据库,则使用 server!!file), 或者指定关键字 MAIL 以打开邮件数据库。 下列语句在指定数据库上进行操作。如果该数据库不存在,则使用模板 [database template name] 创建一个新数据库。 如果指定了 keepopen 选项(即字符串“-keepopen”),则在数据库已经打开时将不会关闭它然后重新打开。
清单 2. ChangeTo 命令语法 ChangeTo [database name] [database template name] [-keepopen] 其中: [database name] - 数据库的全文件名 [database template name] - 模板数据库的文件名 [-keepopen] - 使数据库保持打开状态 样例 1 使用 changeto 创建本地数据库。 * 使用日志模板 (journal.ntf) 创建本地文件 * NOTES.INI 包含设置 templateversion=4 changeto journal.nsf journal[templateversion].ntf -KeepOpen
在 Server.Load 脚本中用于打开视图集合。
清单 3. Open 命令语法 Open (a)
其中: a - 视图文档标识符(可选;缺省值为缺省视图),或者为 DESIGN 以便打开设计集合。 要打开除缺省视图以外的视图,请输入将视图注释标识符从十六进制转换为十进制后最后 3 位的十进制值。 要查看此属性,请打开视图列表并选择一个视图,然后打开该项的“属性”。
在 Server.Load 脚本中用于从数据库中获取所有注释标识符的标识符表。 此命令必须在其他命令(例如,对数据库中的随机文档进行操作的 Stamp)之前使用, 因为这些命令会从该表中选取随机注释。如果未使用此命令,主标识符表开始时为空。
GetAll 命令语法 GETALL [collection|recent] 在 Server.Load 脚本中用于从数据库中获取所有注释标识符的标识符表。此命令必须在其他命令之前使用,例如: 样例 GetAll Recent - 最近打开的集合中的最近的项。 GetAll Collection - 最近打开的集合中的所有项。
在 Server.Load 脚本中用于根据“a”的值来更新数据库中的随机文档。
Update 命令语法 Update (a, b, c) 其中: a - 要更新的文档的数量。如果未指定“a”,则只更新一个文档。 b - 摘要项“主题”的新大小(可选;缺省值为 "")。如果未指定“b”,则摘要数据的长度将是一个介于 1 和 100 字节之间的一致随机数。 c - 非摘要项“正文”的长度(可选;缺省值为 "")。如果未指定“c”,则非摘要数据的长度将是一个介于 100 和 300 字节之间的一致随机数。
- 命令调试
Server.Load 提供了一种手动模式,用户可以在该模式下提交测试命令,方便脚本调试。
图 12. 手动模式
本文简单介绍了 Domino 性能测试工具 Server.Load 的使用方法以及定制脚本功能。Server.Load 是一个强大的 Lotus Domino 性能测试工具 , 它可以用于测试高负载压力下 Domino 应用的性能,为 Notes 程序开发以及调优提供有效的数据。
在实际使用中,通常将 Server.Load 的测试数据与 Domino 服务器操作系统的运行数据结合起来进行性能分析。基于分析数据,用户需要结合多种因素进行性能调优。这些因素包括操作系统,文件系统,网络参数,Domino notes.ini, 以及 Domino Server task。通过性能测试,用户需要找出系统的性能瓶颈以及最适合的调优参数。在接下来的第二部分中,我们会从开发者的角度展开讨论一些 Domino 应用程序中经常出现的一些性能问题以及如何避免这些性能问题的最佳实践。
学习
- 参考 developerWorks 上的文章
面向 IBM Lotus Notes 用户的 IBM Lotus Domino 8.5 性能评测
- 参考 developerWorks 上的文章
IBM Lotus Notes V8 工作负载:将性能提升到新的水平
- 参考 developerWorks 上的文章
IBM Lotus Domino Server.Load V8 快速入门指南
- 参考 developerWorks 上的文章
Quick start guide to IBM Lotus Domino Server.Load V8
- 参考 developerWorks 上的文章
Introduction to Domino performance tuning
- 参考 developerWorks 上的文章
Using Server.Load to evaluate and enhance IBM Lotus Domino server performance
- 访问 developerWorks Lotus 专区。
- 随时关注 developerWorks 技术活动和网络广播。
讨论
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
- 加入 IBM 软件下载与技术交流群组,参与在线交流。

