在 Windows 和 UNIX 上配置和优化 WebSphere MQ 性能.docx
《在 Windows 和 UNIX 上配置和优化 WebSphere MQ 性能.docx》由会员分享,可在线阅读,更多相关《在 Windows 和 UNIX 上配置和优化 WebSphere MQ 性能.docx(37页珍藏版)》请在冰豆网上搜索。
在Windows和UNIX上配置和优化WebSphereMQ性能
在Windows和UNIX上配置和优化WebSphereMQ性能
文档选项
打印本页
将此页作为电子邮件发送
级别:
中级
TimDunn (dunnt@),软件开发人员,IBM
ToghillPeter (peter_toghill@),软件开发人员,WebSphereMQPerformance团队,IBM
2008年1月31日
WebSphereMQ队列管理器的缺省配置可很好地处理平均处理负载,但并没有针对性能进行优化。
本文将说明如何为在Windows、UNIX或Linux上运行的WebSphereMQ队列管理器优化消息处理性能。
引言
使用缺省属性创建的IBM®WebSphere®MQ队列管理器配置为使用适当的内存和磁盘空间来提供全功能队列管理器。
不过,其中并没有针对性能进行优化,您可以进行一系列配置更改,以提高WebSphereMQ的消息处理性能。
本文将说明如何对Windows®、UNIX®或Linux®上运行的WebSphereMQ队列管理器进行这些优化工作。
优化选项包括:
∙队列管理器日志
∙队列管理器通道
∙队列管理器侦听器
∙队列缓冲区大小
下表显示了哪个优化区域适用于哪种消息类型:
应用于非持久消息
应用于持久消息
队列管理器日志
N
Y
队列管理器通道
Y
Y
队列管理器侦听器
Y
Y
队列缓冲区大小
Y
Y
队列管理器的一些优化更改必须在定义队列管理器之前 实现,因此请在进行任何设置工作之前通读本文,否则可能就需要进行一些重复工作了。
此类更改在相关部分中标识。
建议:
将优化应用到所连接的所有队列管理器,因为使用多个队列管理器的消息传递性能将依赖于所有这些队列管理器的性能。
您应该有一定Windows和UNIX上的WebSphereMQ配置经验。
本文中,参数及其值的描述基于WebSphereMQV6,使用了名为MyQueueManager的队列管理器。
请在注册表项名称和目录名称中使用您的队列管理器进行相应的替换。
在UNIX和Linux上配置WebSphereMQ时,要使用相同的设置qm.ini配置文件的方法。
UNIX上所有对配置参数的引用也适用于Linux,不过本文将仅仅讨论在UNIX上的情况。
队列管理器日志
队列管理器日志配置和性能仅仅在队列管理器中处理持久消息时才需要加以注意。
如果您仅使用非持久消息,则可以跳过此部分内容。
这里重要的性能因素包括:
∙日志文件位置
∙日志写入级别
∙日志记录类型
∙日志文件大小
∙日志文件扩展的数量
∙日志缓冲区大小
∙并发应用程序的数量
∙工作单元内的应用程序处理
其中,如果您希望更改缺省值,则必须 在创建队列管理器前作为crtmqm命令的选项指定日志文件位置、日志记录类型和日志文件大小。
创建队列管理器后就不能更改这些队列管理器,因此将需要删除并重新定义队列管理器,以进行更改。
对于其他项,您可以在创建队列管理器后通过在Windows注册表或qm.ini配置文件中的队列管理器Log节指定新值来进行更改。
并发应用程序数量和工作单元内处理的应用程序并不算是真正的WebSphereMQ配置问题,而是依赖于访问队列管理器中的消息的应用程序。
这些应用程序的行为可能会对队列管理器造成显著的影响,特别在出现错误时更是如此。
日志文件位置
概述
建议:
将队列管理器的日志放在独立的磁盘上,特别是在希望处理大型消息或大量消息(>50条消息/秒)时更应如此。
在可能的情况下,将日志分配到带有电池后备写入缓存的设备上。
此类设备目前在存储区域网络(StorageAreaNetwork,SAN)中非常普遍。
如果这样不现实,请使用最快的本地磁盘——例如,使用10,000RPM磁盘比使用6,000RPM磁盘更好。
队列文件所在的设备的速度对性能并不非常重要。
队列管理器对队列使用惰性写入,而对日志进行同步写入,因此如果您只要有高性能磁盘,则将其分配给日志即可。
Windows上的日志文件设置与UNIX上有所不同。
不过,您指定位置的方式在这两个环境中都是一样的——使用crtmqm命令的–ld选项。
如果要将特定的磁盘分配给队列文件和日志数据文件,则必须在定义队列管理器之前定义这些参数。
Windows上的设置
使用Windows工具在可用的最佳设备上创建目录。
例如,为日志创建名为D:
\MQM_LOG\的目录。
如果您在一个操作系统映像上有多个队列管理器,请为每个日志使用不同的磁盘。
在创建队列管理器时使用 crtmqm 命令中的–ld标志指定目录。
以下是crtmqm命令的格式:
crtmqm[-z][-q][-cText][-dDefXmitQ][-hMaxHandles]
[-gApplicationGroup]
[-tTrigInt][-uDeadQ][-xMaxUMsgs][-lpLogPri][-lsLogSec]
[-lc|-ll][-lfLogFileSize][-ldLogPath]QMgrName
UNIX上的设置
在UNIX上,您需要分配文件系统来承载队列管理器文件和日志。
建议:
在不同的磁盘为队列管理器和日志文件创建不同的文件系统。
使用操作系统的工具分配文件系统。
将日志的文件系统分配到可用的最佳设备上。
以下是UNIX(AIX)上的此过程的示例:
Filesystem512-blocksFree%UsedIused%IusedMountedon
/dev/hd45242884830088%22845%/
/dev/hd2393216011116098%4064472%/usr
/dev/hd9var4456448206762454%135346%/var
/dev/hd32097152164294422%7411%/tmp
/dev/hd12621442613361%161%/home
/proc-----/proc
/dev/hd10opt94371840100%1284947%/opt
/dev/mqmlv167772161145382432%5611%/var/mqm
/dev/mqmloglv16777216157252887%91%/var/mqm/log
/dev/mqmerrlv16777216165523282%821%/var/mqm/errors
/dev/db2lv16777216159732405%3521%/db2data
/dev/db2loglv16777216167740001%41%/db2log
mqmlv逻辑卷上分配的文件系统作为/var/mqm加载,与使用/var为WebSphereMQ指定的文件系统不一样。
类似地,mqmloglv逻辑文件系统上分配的文件系统作为/var/mqm/log加载。
这样分配此文件系统,可使其驻留在独立的物理磁盘上。
如果在定义队列管理器时未将文件系统/dev/mqmloglv作为/var/mqm/log文件加载,日志将被分配在/var/mqm文件系统中,而这不是您所希望的结果。
请确保在运行crtmqm命令创建队列管理器前分配并加载文件系统。
另外,请注意已经对安装在同一台计算机上的数据库使用了相同的数据和日志分配方法,分别使用的是/db2data和/db2log装入点。
日志写入级别
概述
您可以指定队列管理器日志程序用于可靠地写入日志记录的方法。
所使用的方法在队列管理器配置的Log节使用LogWriteIntegrity参数指定。
可能的值有:
SingleWrite
有些硬件保证,如果写入操作写入页而因为任何原因失败,对缓冲区中同一页的后续读操作将会导致缓冲区中的每个字节为以下情况之一:
∙和写入前一样,或者
∙应该在写入操作中写入的字节
在这种类型的硬件上(如启用了写入缓存的SAN磁盘),日志程序完全可以在单次写入中写入日志记录,因为硬件会保证完全的写入完整性。
此方法可提供最佳的性能。
DoubleWrite
WebSphereMQV5.2中使用的缺省方法,只用于向后兼容性目的。
TripleWrite
缺省方法。
当硬件不确保写入完整性时,应该使用TripleWrite方法写入日志记录,因为此方法提供完全的写入完整性。
消息量大的系统(>1000条消息/秒)使用SingleWrite和TripleWrite的区别不大,因为只有每个日志写入操作中的最后4k的数据块可能会写入三次。
如果您与磁盘提供商的讨论结果满意,日志所在的设备能够确保写入完整性,则请使用SingleWrite来获得最佳的性能。
如果您更改了这个值,则必须重新启动队列管理器,以使更改生效。
在Windows上进行更改
要更改为队列管理器使用的日志写入级别,必须在注册表中更改缺省值:
1.停止队列管理器和任何关联的应用程序。
2.备份Windows注册表。
3.运行regedit。
4.导航到队列管理器日志注册表项。
例如:
HKEY_LOCAL_MACHINE\SOFTWARE\IBM\MQSeries\CurrentVersion\Configuration\QueueManager\MyQueueManager。
5.选择Log项。
6.双击LogWriteIntegrity字符串值,并根据需要修改此值。
7.退出regedit。
8.重新启动队列管理器。
下面的图1显示了队列管理器MyQueueManager的Log键值:
图1.Log注册表项
在UNIX上进行更改
要更改为队列管理器使用的日志写入级别,必须在队列管理器qm.ini文件中更改缺省值:
1.停止队列管理器和任何关联的应用程序。
2.备份文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
3.编辑文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
4.如果存在Log节则对其进行编辑,如果不存在则创建此节。
5.将LogWriteIntegrity项修改为所需的值。
6.保存该文件。
7.重新启动队列管理器。
以下是在AIX上运行的队列管理器MyQueueManager的Log项值。
实际上,qm.ini文件中可能会有其他节:
#*******************************************************************#
#*ModuleName:
qm.ini*#
#*Type:
WebSphereMQqueuemanagerconfigurationfile*#
#Function:
Definetheconfigurationofasinglequeuemanager*#
#**#
#*******************************************************************#
#*Notes:
*#
#*1)Thisfiledefinestheconfigurationofthequeuemanager*#
#**#
#*******************************************************************#
ExitPath:
ExitsDefaultPath=/var/mqm/exits/
ExitsDefaultPath64=/var/mqm/exits64/
#**#
#**#
Log:
LogPrimaryFiles=10
LogSecondaryFiles=10
LogFilePages=1024
LogType=CIRCULAR
LogBufferPages=0
LogPath=/var/mqm/log/MyQueueManager/
LogWriteIntegrity=SingleWrite
日志记录类型
概述
WebSphereMQ提供两种日志记录类型,分别为循环方式和线性方式。
使用循环日志记录时,当日志文件扩展不再包括活动数据日志时,会将其进行重新使用。
另一方面,使用线性日志记录时,将根据需要继续分配日志文件扩展。
日志不再使用时,就可以对其进行存档。
如果您需要在出现故障时转发恢复队列数据,或者从包含日志的设备的媒体故障进行恢复,而且依赖于WebSphereMQ来提供这种级别的保护,则必须使用线性日志记录。
此方法的一个替代策略是使用磁盘镜像来对日志设备进行镜像。
这通常是SAN提供的功能。
在这种情况下,您可以使用循环日志记录。
出于性能的考虑,请选择循环日志记录。
循环日志记录是创建队列管理器时的缺省选项。
指定日志类型时,Windows和UNIX环境的注意事项都是一样的。
crtmqm命令的–lc选项用于指定线性日志记录。
使用–ll选项指定线性日志记录。
尽管日志记录类型可以在队列管理器的qm.ini文件中指定,但在其中的任何更改都不会导致行为的变化,因为队列管理器创建之后就不能更改日志记录类型了。
日志文件扩展大小
概述
每个日志文件扩展的大小在队列管理器创建时指定,以后不能更改,因此务必在首次定义队列管理器时就正确设置此参数。
在Windows和UNIX上指定日志文件大小的方式是一样的。
即使用crtmqm命令的–lf参数指定。
不过这两个平台类型的缺省值有一些区别。
在WebSphereMQforWindows中,缺省日志文件页数为256,日志文件大小为1MB。
最小日志文件页数为32,最大为65535。
在WebSphereMQforUNIX系统中,缺省日志文件页数为1024,日志文件大小为4MB。
最小日志文件页数为64,最大为65535。
只要拥有足够的磁盘空间,我们都建议分配最大的大小值。
日志文件扩展的数量
概述
日志文件扩展可以指定为主扩展或次扩展。
主扩展在首次启动队列管理器时由队列管理器分配和格式化,而其他扩展是以后添加的。
主扩展格式化之后就可以重新使用。
次日志文件扩展由队列管理器在主文件耗尽的情况下动态分配。
由于此类扩展是动态格式化的,因此在不需要的情况下,不建议使用。
不过,如果活动中出现了非预期的峰值而导致主扩展被用完(例如,由于出现了长时间运行的工作单元),这就极为有用了。
如果主扩展被填满,而没有更多的次扩展可用,队列管理器将选择退出尚未提交的工作单元。
此行为可确保有合理数量的次扩展。
日志扩展的数量可以在 crtmqm 命令上使用–lp标志(主扩展)和–ls标志(次扩展)指定,还可以在队列管理器的Log节使用LogPrimaryFiles和LogSecondaryFiles值指定。
对于Windows,队列管理器的Log节项位于Windows注册表中。
在UNIX上,Log节位于队列管理器的qm.ini配置文件中。
可配置的最小主日志文件个数为2,其最大数目在Windows上为254,而在UNIX系统上为510个。
缺省为3。
Windows上主日志文件和次日志文件的总数不能超过255,而UNIX系统上不超过511,最少不能少于3个。
操作系统限制可能会减少日志的最大可能大小。
所需的扩展数量取决于要记录的数据量和每个扩展的大小。
实际的起点可以为LogPrimaryFiles=10和LogSecondaryFiles=10。
在Windows上进行更改
如果您希望更改为队列管理器分配的日志文件扩展的数量,您将需要在注册表中更改这些值:
1.停止队列管理器和任何关联的应用程序。
2.备份Windows注册表。
3.运行regedit。
4.导航到队列管理器日志注册表项。
例如,HKEY_LOCAL_MACHINE\SOFTWARE\IBM\MQSeries\CurrentVersion\Configuration\QueueManager\MyQueueManager。
5.选择Log项。
6.双击LogPrimaryFiles字符串值,并根据需要修改此值,以更改主扩展的数量。
7.如果希望更改次扩展的数量,请对注册表项LogSecondaryFiles进行类似的修改。
8.退出regedit。
9.重新启动队列管理器。
有关Log项中的LogPrimaryFiles和LogSecondaryFiles参数的视图,请参见上面的图1。
在UNIX上进行更改
如果您希望更改为队列管理器分配的日志文件扩展的数量,您将需要在qm.ini文件中更改缺省值:
1.停止队列管理器和任何关联的应用程序。
2.备份文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
3.编辑文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
4.如果存在Log节则对其进行编辑,如果不存在则创建此节。
5.将LogPrimaryFiles条目修改为所需的值,以更改主扩展的数量。
如果希望更改次扩展的数量,请对LogSecondaryFiles条目进行类似的修改。
6.保存该文件。
7.重新启动队列管理器。
有关LogPrimaryFiles和LogSecondaryFiles参数在qm.ini文件的Log节中的视图,请参见上面日志写入级别中的“在UNIX上进行更改”。
日志缓冲区大小
概述
日志缓冲区是用于存放将要写入磁盘中的日志记录的主存量。
日志记录追加到日志缓冲区中已使用的部分的尾部。
达到缓冲区尾部后,需要进行某种序列化操作,以降低数据传输到磁盘的速率。
大型缓冲区不会像较小的缓冲区那样经常达到这个极限。
根据队列管理器所在的平台,您可以使用队列管理器的Log节的LogBufferPages参数以4KB页为单位指定缓冲区大小。
缓冲区页面最少为18,最大为4097。
较大的缓冲区能提供更高的吞吐量,尤其能很好地处理较大的消息。
如果您指定0(缺省值),队列管理器将选择大小。
在WebSphereMQVersion6.0中,此值为128(512KB)。
如果指定的是1到17之间的数,队列管理器将缺省使用18(72KB)。
如果指定的值在18到4096之间,队列管理器将使用指定的数字设置所分配的内存。
此值在Windows上使用注册表指定,而在UNIX上使用qm.ini文件指定。
可以在定义队列管理器之后更改此值。
不过,在队列管理器重新启动之前,此值的更改将不会生效。
为了提高性能,请指定最大的可能值。
这将有助于写入大量日志数据的情况,允许在单次日志I/O中写入大型消息。
这样的设置将会使存储使用率有一定的增加。
使用大值将不会在写入少量数据时影响性能,但如果写入大量数据时指定了小值,就可能导致队列管理器必须发出多次写入日志的命令,从而影响性能。
在Windows上进行更改
如果您希望更改队列管理器的日志缓冲区大小,将需要在注册表中更改此值:
1.停止队列管理器和任何关联的应用程序。
2.备份Windows注册表。
3.运行regedit。
4.导航到队列管理器日志注册表项。
例如,HKEY_LOCAL_MACHINE\SOFTWARE\IBM\MQSeries\CurrentVersion\Configuration\QueueManager\MyQueueManager。
5.选择Log项。
6.双击LogBufferPages项,并根据需要修改此值,以更改分配的页数量。
7.退出regedit。
8.重新启动队列管理器。
下面的图2显示了将LogBufferPages更改为4096后的Log注册表项。
图2.更改了LogBufferPages的缺省值后的Log注册表项
在UNIX上进行更改
如果您希望更改队列管理器的日志缓冲区大小,将需要在队列管理器qm.ini文件中更改此值:
1.停止队列管理器和任何关联的应用程序。
2.备份文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
3.编辑文件/var/mqm/qmgrs/MyQueueManager/qm.ini。
4.如果存在Log节则对其进行编辑,如果不存在则创建此节。
5.将LogBufferPages条目修改为所需的值,以指定要分配的页数量。
6.保存该文件。
7.重新启动队列管理器。
以下是将LogBufferPages值更改为4096后Log节的内容。
在实际中,qm.ini文件中可能还包括其他节的内容。
#*******************************************************************#
#*ModuleName:
qm.ini*#
#*Type:
WebSphereMQqueuemanagerconfigurationfile*#
#Function:
Definetheconfigurationofasinglequeuemanager*#
#**#
#*******************************************************************#
#*Notes:
*#
#*1)Thisfiledefinestheconfigurationofthequeuemanager*#
#**#
#*******************************************************************#
ExitPath:
ExitsDefaultPath=/var/mqm/exits/
ExitsDefaultPath64=/var/mqm/exits64/
#**#
#**#
Log:
LogPrimaryFiles=10
LogSecondaryFiles=10
LogFilePages=4096
LogType=CIRCULAR
LogBufferPages=4096
LogPath=/var/mqm/log/MyQueueManag