二、 与队列属性有关的MQ性能考虑因素
1 消息的永久性和非永久性
大家知道,MQ的消息分为永久性消息和非永久性消息两种,永久性消息是保存在硬盘存储介质上的,需要纪录日志的;相反,非永久性消息是存储在内存中的,不需要硬盘读写,因此使用非永久性消息的性能比永久性消息的性能要高很多,具体而言,最大可以提高近十倍。要注意的是,只有永久性消息的可靠性是可以保证的,即在发生故障,如当系统重启或队列管理器重启时,可以保证不丢失。因此,应根据您的业务需求和网络状况来确定消息的属性。
2 调整队列的相关参数设置:
对于队列而言,除了可以通过MQSC的”define queue”命令设置它的属性之外,有另外两个参数直接影响队列的性能,而这两个参数只有通过qm.ini文件进行设定。它们分别是:队列文件的大小(Maximum amount of bytes in a queue)和为每一个队列的非永久性消息保留的内存大小(Maximum amount of memory reserved for non-persistent messages),它们的缺省值分别对应于DefaultQFileSize和DefaultQBufferSize这两个参数。
队列的定义存储在硬盘上,并且在队列被打开时申请资源。我们可以设置队列DafaultQFileSize和DafaultQBufferSize两个参数来确定队列的定义参数,这些参数在队列管理器重启时生效,下面分别给予描述。
1) 队列文件大小
缺省情况下,队列文件在硬盘上的大小最大是320M, 它会被预先分配195kb内存,这195kb内存会在队列打开时获得。队列文件的大小最大值可以达到1G bytes, 这可以通过设置DefaultQFileSize参数来设定,当其设为1G时,队列打开时会申请350kb内存。
2)非永久性消息对应的内存大小
缺省情况下,对每个队列而言,用来存储non-persistent消息的共享内存是64kb, 我们可以通过修改DafaultQBufferSize参数将其增加至1MB。在打开队列的时候,要申请如此数量的内存,因此它直接影响到队列管理器需要的内存资源的大小,包括实存和虚存。推荐值是把该值设制成64kb的两倍,即128kb。永久性消息是存在硬盘上的,而非永久性消息是存在内存中的,当设定的buffer不够时,要进行磁盘交换,速度就会减慢,把它扩大后,若不进行硬盘交换,读取队列的速度就会快。当然,对该参数的修改也取决于系统实际物理内存的大小。
修改这两个参数的方法是更改队列管理器配置文件qm.ini的相关参数,具体方法举例如下:
在qm.ini文件中增加如下一节:
TuningParameters:
DefaultQBufferSize=128000
DefaultQFileSize =1000000000
3 队列的深度和队列上的消息的长度的设置也会影响性能。
对每一个队列而言,都会被分配一个设定的buffer size,当磁盘I/O很高时,说明队列的buffer size满了,从而产生了硬盘交换。每个消息的大小乘以队列的深度决定了队列上消息占内存的大小,可以增加队列的个数或者增加队列的buffer size来提高性能。
4 设置多个队列提高并行处理能力
例如在总部,可以针对每一个分支机构设置一个队列,采用多个应用程序读取这些队列;对于同一个队列,也可以采用多个进程/线程同时进行读取操作。
以下文章点击率最高
Loading…