我正在尝试追踪客户端无法以尽可能快的速度阅读邮件的问题。持久性消息将写入队列。有时,GET速率比PUT速率慢,我们看到消息备份。
使用tcpdump,我看到以下内容:
MQGET: Convert, Fail_If_Quiescing, Accept_Truncated_Msg, Syncpoint, Wait
Message is sent
Notification
MQCMIT
MQCMIT_REPLY
在分析转储时,有时我看到MQCMIT和MQCMIT_REPLY之间的差值在0.001秒的时间范围内,我也在0.1秒的时间范围内看到它。看起来0.1秒的延迟会减慢邮件传输速度。有什么办法可以减少MQCMIT和MQCMIT_REPLY之间的差值吗?客户端是否应该在发送MQCMIT之前读取多条消息?
这是AIX 7.1上的MQ 8.0.0.3。
答案 0 :(得分:2)
在接收端增加消息吞吐量的最直接方法是批量MQGET操作。也就是说,不要为每个MQGET发出MQCMIT,而是在多次MQGET操作之后发出MQCMIT。 MQCMIT是持久性消息最昂贵的操作,因为它涉及在队列管理器上强制执行日志写入,因此会遭受磁盘I / O延迟。试验批量大小 - 我经常使用100,但有些应用程序可以更高。太多未完成的MQGET操作可能会有问题,因为它们会使事务运行更长时间并阻止日志切换。
当然,您可以检查您的系统整体调整是否令人满意。您的客户端和队列管理器之间的延迟可能太长,或者您的日志可能驻留在速度较慢的设备上,或者日志可能与队列文件或其他繁忙的文件系统共享设备。