WebSphere MQ 做为一种消息中间件,它的应用领域主要在两大方面:
1、我们可以编写相应的处理逻辑,来完成不同应用的集成。甚至我们可以在WebShphere MQ的基础上实现分布式Websphere MQ数据交换网络,从而完成不同用户之间、不同部门之间的文件交换,并且具有断点续传、传输加密、在HTTP协议上传输以穿透防火墙等功能。
2、WebSphere MQ 做为WebSphere Message Broker的底层,WebSphere MQ所能够达到的最大性能对整个WebSphere Message Broker所能够体现的性能至关重要。
WebSphere MQ的性能是企业服务总线、以及总线上的应用所能够达到最大性能的关键,也是现在很多SOA应用所能够达到最大性能的关键。 对于这两大方面的应用,我们需要根据具体的应用架构来对WebSphere MQ进行性能优化。为了对WebSphere MQ进行性能优化唯一的方法就是做好性能测试,从而可以决定更好的架构和更好的参数值来得到更高的系统性能。
Websphere MQ数据交换网络:表示多个Websphere MQ队列管理器进行配置形成一个完整的数据交换环境。
WebSphere MQ 客户端应用:表示与WebSphere MQ进行交互的应用程序。
MQ Client App: WebSphere MQ 客户端应用的英文简称。
消息生产者:表示往Websphere MQ放入消息的WebSphere MQ 客户端应用。
消息消费者:表示从Websphere MQ 取出消息的WebSphere MQ 客户端应用。
Within:表示WebSphere MQ 客户端应用与WebSphere MQ处于同一个操作系统环境中,采用IPC通讯方式。
Across::表示WebSphere MQ 客户端应用与WebSphere MQ处于同一个操作系统环境中,采用TCP/IP通讯方式。
IPC:进程间通讯,这里的IPC是指同一个操作系统环境中的多个进程采用类似于共享内存的方式来进行通讯。
WebSphere MQ应用架构基本上就是以下几个应用架构地扩展和组合。
图3.1 单个队列管理器应用架构
点击查看大图
图3.1所表示Websphere MQ应用架构主要分成以下4种:
而在现实的应用场合中,我们需要对这种架构进行扩展,从而可以形成如下图所示的应用架构。
图3.2 多队列管理器应用架构示例
点击查看大图
在实际用户场景中,WebSphere MQ 客户端应用与Websphere MQ的通讯方式基本上分成以下两种。
图3.3 改进的配置示例
点击查看大图
对于图3.3 改进的配置示例所示的架构,我们进行了这样的改变,即把图的上半部分所表示的架构改变成下半部分所表示的架构,这样的架构改变会带来一个好处就是部署在WAS上的JMS/MQ应用往WebSphere MQ放入消息或者取消息的效率将得到大大地提高,从而提高了WAS上的JMS/MQ应用的执行效率
无论Websphere MQ应用架构如何变化,要使整个系统达到一个很好的性能,如何进行性能测试和如何调整WebSphere MQ参数的方法都是一样的。为了更好地阐述相应的方法,我们将以图3.1 单个队列管理器应用架构 所示的架构为例。
为了使Websphere MQ发挥最大的性能(假设我们已经对WebSphere MQ 客户端应用进行了Websphere MQ调用编码级别的性能优化考虑),我们需要考虑以下对Websphere MQ产生重大性能影响的几个方面。
现在让我们想像下我们的应用场景,在整个系统运行时,会存在多个消息生产者和消息消费者与Websphere MQ进行交互,并且这些消息生产者和消息消费者会操作不同的队列或者同一个队列。通过这样地分析我们可以得到以下的用例需要进行测试(假设消息大小为1K),并且我们需要根据现实的情况来决定消息生产者和消息消费者的数目、队列的数目以及决定是否需要把相应的用例进行组合来进行测试。
要测试的用例表格如下所示:
图 4.1 性能测试用例
点击查看大图
上述的表格我们确定了三大类用例:
我们可以把这三大类用例进行组合一起进行测试,从而可以模拟出真实的复杂环境。通过上面的测试用例表格,我们需要在Websphere MQ中建立20个队列(假设Websphere MQ安装在AIX环境上)。
有了测试用例,我们需要测试程序。我们如何形成测试程序来模拟真实的环境呢?我们可以利用MQ提供的ih03这个supportpac程序来进行模拟,根据测试结果来决定Websphere MQ的参数调整和架构的确定。这里所阐述的方法和步骤在实际的场景中可以完全采用。由于ih03提供的测试程序的限制无法进行长时间的压力测试,所以决定了我们这篇文章是在阐述一个可借鉴的性能测试方法而不是一个具体的步骤。
我们准备2台机器,一台机器做为测试客户机(2CPU),一台机器做为测试服务器(4CPU)。测试服务器和客户机安装AIX操作系统、gcc编译器、ih03程序。客户机上的ih03程序通过TCP/IP的方式连接测试服务器上的Websphere MQ 队列管理器,测试服务器上的ih03程序通过IPC方式连接MQ队列管理器。在这里测试环境不采用高速存储设备,直接利用本机提供的磁盘。
图 5.1测试的架构
点击查看大图
注:左边的是测试服务器,右边的是测试客户机。
为了部署这样的架构我们需要做如下几个方面的工作:
1、在测试服务器上安装Websphere MQ V6.0 Server,并且打补丁打到V6.0.2.1。
2、在测试客户机上安装WebSphere MQ V6.0 Client,打补丁到V6.0.2.1
3、在测试客户机上用gcc编译相应地源代码,源代码见:src.rar
3.1.编辑相应地Makefile文件,文件内容见:Makefile.server
3.2.建立server目录,调用make all将在server目录生成可执行文件。
4、在测试服务器上用gcc编译相应地源代码,源代码见:src.rar
4.1.编辑相应地Makefile文件,文件内容见: Makefile.client
4.2.建立client目录,调用make all将在client目录生成可执行文件。
5、在测试服务器上调用crtmqm 命令建立相应地队列管理器QM1,注意把MQ日志的路径指向单独的一个磁盘设备上。
创建队列管理器的时候,注意扩大日志文件的大小和数目(这个大小和数目和你要持久化的消息的数目以及消息大小的乘积的值密切相关,不同的应用场景的值是不一样的)
命令格式如下:
crtmqm -lf
我们最好把LogFilePages这个值设值为16384,即每个日志文件的大小为64MB。
并且还有一个非常中要的参数就是qm.ini中的LogBufferPages参数,它代表日志缓冲区的大小,修改这个值能大幅提高性能。通过增大这个值,对存储持久化消息来说可以减少磁盘的I/O数目,从而间接提高放入持久化消息的速度。最好把这个值设置为4096。
6、用WebSphere MQ相应地命令在队列管理器上建立好相应地队列、侦听器(TEST.LISTEN(1414))、服务器连接通道(SYSTEM.ADMIN.SVRCONN).
在开始测试前,我们需要调整和Websphere MQ性能比较关键的几个参数值。
将通道和侦听程序设置为trusted方式,通过修改qm.ini配置文件中MQIBindType参数,创建或修改qm.ini文件中与Channels相关的小节
Channels:
MQIBindType=FASTPATH
操作系统通信内核参数的调整
这里主要涉及两个参数的调整,一个是sendbuffersize,一个是recvbuffersize,这个参数最好设置在4k-16k之间,这个值主要和你的网络带宽相关需要在客户机和服务器都修改,最好两边的值都是一样。并且这个值的选取最好由你所产生的消息大小来确定,如应用系统中大部分消息的大小都是4K-16K之间的话,那我们最好设定这个值的大小为8K。
并且在跨广域网的多个队列管理器之间互连通信的时候我们最好把WebSphere MQ 的keepalive 的值设为TRUE,并且修改操作系统通信内核参数(SOCKET超时时间) 的值。
各个操作系统都提供了对系统资源消耗的监控工具,如vmstat 、topas等。然后我们需要有这样一个工具,它能够监控系统的资源消耗情况并形成一个数据文件,然后这个工具提供一个分析工具把这些数据文件转换成一些图表和报表,这样我们可以通过分析这些图表和报表来查看系统资源(如内存、CPU、网络带宽、I/O情况)情况,来进一步确定需要调整哪些WebSphere MQ参数,以进一步提升WebSphere MQ的性能。
对于这样的工具,我们建议使用nmon。nmon能够监控系统资源的使用情况并形成一个数据文件。它还提供了一个分析工具,从而我们可以把这些数据文件转换成EXCEL表格,让我们非常方便地分析系统资源消耗的情况。这个分析工具产生的分析结果给我们进行操作系统参数的调整和Websphere MQ参数的调整提供了一个很好的参考数据。
此工具的参考资料和下载信息请见:
1、nmon performance: A free tool to analyze AIX and Linux performance
2、nmon analyser : A free tool to produce AIX performance reports
按照说明分别在测试客户机和服务器上安装nmon.
我们从上面测试用例表格中选取一个测试用例来阐述测试的步骤,这样的步骤在任何场景以及真实的应用场景中的性能测试中都是类似的。
我们选取Many to Many、消息生产者和消息消费者的数目都是20、建立的队列数目是20、消息生产者和消息消费者在测试客户机这个用例来演示我们如何进行性能测试和分析来决定参数调整。
1、在放有可执行程序的目录,建立manytomany2目录,把相应地mqtimes2、mqput2程序放入此目录。
2、我们打算每个生产者将产生7W条持久性消息,每个消息大小为2K。
mqtimes2:对应的就是消息消费者
mqput2:对应的是消息生产者。
2.1、制做一个消息文件大小为2k 的文件:msg2.data。
2.2、制做mqput2这个消息生产者所需要的参数定义文件:parmtst1.txt,并且修改parmtst1.txt文件中qmgr的值为合适的队列管理器名称如QM1,msgcount的值为70000 persist的值为1(代表为持久化消息),msgtype的值为8(代表为数据报消息),encoding的值为273(代表为AIX integers),codepage的值为437(代表为ascii), filelist的值为msg2.data(代表打入的消息为msg2.data文件对应的数据)。
3、编写startTest.sh脚本,从而可以同时把mqtimes2和mqput2这两个应用启动起来,脚本的内容:
echo "The usage: startTest.sh [testclientnumber MsgCount]"
echo $1
i=$1
echo $i
while [ $i -ne 0 ]
do
./mqput2 -f parmtst1.txt -q Q$i> MQPut2log$i.txt &
./mqtimes2 -c $2 -q Q$i -t 30 -m QM1 -s 4096 -b 120> MQTimeslog$i.txt &
i=`expr $i - 1`
done
4、在测试客户机端(mqm用户),运行:
export MQSERVER=SYSTEM.ADMIN.SVRCONN/TCP/’200.31.11.146(1414)’
export MQCCSID=819
表示要连接哪台机器上的Websphere MQ.
5、 在测试服务器端,起动nmon工具,
./nmon –fT –s 3 –c 150
这个命令将在当前路径产生一个后缀名为nmon的存储监控信息的数据文件,以被事后分析。
6、在测试客户机端,启动测试
./startTest.sh 20 70000
这个脚本代表将起动20个消息生产者(mqput2)进程和20个消息消费者(mqtimes2)进程,不同的消息生产者进程操作不同的队列。
7、等待测试结束,把测试客户机上的消息生产者(mqput2)进程和消息消费(mqtimes2)进程产生的结果文件(MQTimeslog和MQPut2log文件),下载到本机。
7.1、通过查看MQPut2log文件我们可以知道花费了多少时间完成消息的打入,以及成功打入了多少条消息
7.2、通过查看MQTimesLog文件我们可以知道花费了多少时间完成消息的取出,以及平均每秒消费了多少条消息,以及各个时刻对应的每秒消费了多少条消息。 通过这个我们可以得到WebSphere MQ的消息吞吐率。
8、把测试服务器上的nmon工具产生的存储监控信息的数据文件下载到本机
9、用nmon工具提供的analyser工具(它是一个xls文件,里面嵌有宏),打开刚刚下载下来的nmon工具产生的监控信息数据文件,进行转换成xls文件
我们打开转换后的xls文件,通过查看其中的图表和相应的数据可以决定出相应地系统资源的消耗,从而可以决定是否可以继续调整Websphere MQ的参数。
图7.1 CPU和I/O 使用率
点击查看大图
从上图可以看出CPU的使用率非常的平稳,只有40%的CPU被利用到,通过这样的情况,我们马上可以判断出我们可以再增加1倍的并发压力,并且DISK的I/O有点抖动,并且这个可以判断出这个是由于取消息的时候从硬盘中取并且取走后需要删除相应的消息所导致,这样就可以给我们一个假设判断是否可以修改DefaultPQBufferSize这个值来降低这种抖动?于是我们马上查看内存使用情况:
图7.2 内存使用率
点击查看大图
从这个图可以看出空闲内存非常的平稳并且内存还足够,所以我们就会去提高DefaultPQBufferSize这个参数的值,并且增大并发压力来决定我们这个机器能够承受多少压力。
图7.3 网络利用率
点击查看大图
查看这个图可以看到,对于100M以太网来说,网络的带宽利用率并不高。通过上面的判断可以增加并发数,修改WebSphere MQ参数来进行进一步的测试。
上面的阐述仅仅说明了一种思路、一种方法,具体的应用的实施可以借助它来进一步的完善以形成自己的思路和方法,从而给传统的消息中间件应用以及SOA应用的性能最大化打下一个良好的基础
1、nmon performance: A free tool to analyze AIX and Linux performance
2、nmon analyser : A free tool to produce AIX performance reports
3、IH03: WebSphere Message Broker V6-Message display, test &performance utilities
4、MP6K: WebSphere MQ for AIX V6.0 - Performance Evaluations
原文地址:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/0709_jingwen/