跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

构建高性能的 Lotus Domino 应用,第 1 部分

定制 Domino 工作负载 (Server.Load) 脚本测试你的 Domino 应用

邬 海杰, 高级软件工程师, IBM
邬 海杰
邬海杰是 IBM 中国软件开发中心 Lotus 部门的高级软件性能工程师,曾负责 IBM Lotus Quickr for Domino 的性能测试,目前负责 IBM Connections 产品的性能测试。 他在软件性能测试和分析方面有超过 5 年的经验,对软件性能测试技术,Domino 性能测试与调优,WebSphere Application Server 性能调优有深入的研究。
周 舟, 软件工程师, IBM
周舟的照片
周舟是 IBM 中国软件开发中心 Lotus 部门的软件性能工程师,主要参与的项目有 IBM Lotus Quickr for Domino,IBM Lotus Connection 的性能测试和分析,目前负责 IBM Connections 产品的性能测试。 他在 Domino 性能测试,Web 应用程序性能测试等方面均有丰富的经验。

简介: 本系列文章围绕如何构建一个高性能的 Domino 应用为主题,分四篇文章系统地阐述 Domino 应用开发、测试、部署及监控过程中对于性能方面的各种考量,包含开发最佳实践、压力测试方法及系统调优等各个方面。本文作为系列文章的第 1 部分,主要阐述如何利用 Domino 性能测试工具 Server.Load 对 Domino 应用程序进行性能测试。通过性能测试,用户可以找出系统的性能瓶颈以及最适合的 Domino 调优参数。

发布日期: 2012 年 1 月 12 日
级别: 中级
访问情况 : 1197 次浏览
评论: 


服务器性能测试简介

对于服务器端应用,维持其服务器应用的高性能和高可伸缩性是非常重要的,性能的不断提升为客户带来新的价值。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 服务器的性能测试。


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 测试脚本的一般过程为:
  1. 注册压力测试模拟用户。测试中需要模拟多用户并发操作,所以首先需要在服务器上创建模拟用户。Server.Load 提供了"Create notes Bench Mail Person Documents Agent",该代理会创建一系列的测试用户供测试脚本使用。
    设置负载的代理:

    图 1. Create NotesBench Mail Person Documents
    Create NotesBench Mail Person Documents



    提示缺省
    创建邮件用户的起始值1
    要创建的用户的数目1000
    要创建的 Mailn.nsf 文件的数目1000
    启动 Mailn.NSF 文件1
    邮件数据库的位置mail\
    邮件域缺省值从服务器的邮件域中读取
    邮件服务器目录的位置存储 Domino 目录的服务器的名称
    Message storage format2 (MIME)
    邮件系统1 (NOTES)
    Internet 主机名存储 Domino 目录的服务器的主机名


  2. 创建压力测试模拟用户数据。在压力测试中需要在服务器端创建用户数据,用以模拟真实的服务器案例。Server.Load 提供了多种测试案例的数据创建脚本,例如测试人员可以使用“N8Mail 初始化负载”脚本创建 Notes R8 测试数据。

    图 2. N8Mail 初始化负载
    N8Mail 初始化负载

  3. 使用测试脚本进行压力测试。测试人员在完成数据准备之后,就可以运行测试脚本进行压力测试了。下图展示了在 Server.Load 中运行测试脚本的一般过程。

    图 3. 设置 N8Mail 负载测试参数
    设置 N8Mail 负载测试参数



    图 4. 设置 N8Mail 负载 Script 变量
    设置 N8Mail 负载 Script 变量



    图 5. 添加 Script 度量单位
    添加 Script 度量单位

  4. 收集操作系统监视数据。一般需要在性能测试时监控服务器运行期间 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 应用程序中经常出现的一些性能问题以及如何避免这些性能问题的最佳实践。


参考资料

学习

讨论

作者简介

邬 海杰

邬海杰是 IBM 中国软件开发中心 Lotus 部门的高级软件性能工程师,曾负责 IBM Lotus Quickr for Domino 的性能测试,目前负责 IBM Connections 产品的性能测试。 他在软件性能测试和分析方面有超过 5 年的经验,对软件性能测试技术,Domino 性能测试与调优,WebSphere Application Server 性能调优有深入的研究。

周舟的照片

周舟是 IBM 中国软件开发中心 Lotus 部门的软件性能工程师,主要参与的项目有 IBM Lotus Quickr for Domino,IBM Lotus Connection 的性能测试和分析,目前负责 IBM Connections 产品的性能测试。 他在 Domino 性能测试,Web 应用程序性能测试等方面均有丰富的经验。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=785209
ArticleTitle=构建高性能的 Lotus Domino 应用,第 1 部分
publish-date=01122012

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。