WebSphere MQ 性能调优浅谈(一)

 WebSphere MQ 性能调优浅谈

目前随着我们在中国的WebSphere MQ(MQSeries)用户数量越来越多,越来越多的用户开始对MQ使用时的性能优化问题提出要求,希望能够更好地使用我们的产品,并尽可能的发挥它的最大优势,这里,我根据日常积累的经验谈一谈在MQ性能优化方面应该考虑的因素。

一、 与API 调用有关的MQ性能考虑因素

这里,我们在讨论各个API对性能的影响时,均以C语言提供的API为例,其他开发语言与此类似。

1 关于MQCONN/MQDISC的使用

在MQ的13个函数中,MQCONN/MQDISC是最耗CPU的两个函数,其次是MQOPEN和MQCLOSE这两个函数,因此要尽量避免必要地重复使用这几个函数。比如,当您需要从队列中读取多条消息时,正确的编程方法应该如下:

MQCONN

MQOPEN

MQGET

.

.

.

MQGET

MQCLOSE

MQDISC

即:连接/断开队列管理器一次,打开/关闭队列一次,读取消息多次。而不应该反复建立与队列管理器的连接和反复进行队列打开/关闭操作。

2 MQCONNX的使用

通常,我们使用MQCONN这个函数建立与队列管理器的连接,除此之外,MQ支持trusted application binding,即fastpath binding,用MQCONNX来实现。当从性能方面考虑时,我们可以使用MQCONNX来提高性能。

在使用MQCONNX时,我们可以设置MQCNO(connect option)来指定连接方式。缺省情况下,该选项为MQCNO_STANDARD_BINDING,如果设置为MQCNO_FASTPATH_BINDING,即表明采用fastpath binding方式连接队列管理器,这种应用称为trusted application。所谓的trusted application,是指该应用程序和本地队列管理器代理组成同一个进程,从而提高性能。利用fastpath binding不仅能够提高连接队列管理器的性能,同时也能够提高mqopen,mqclose的性能。

3 消息大小对mqput, mqget函数耗时的影响

尽量减小消息的大小,小消息的读取效率要高。对于mqget, mqput这两个函数而言,8k以下的消息的耗时差别不大,8k到128k的消息的耗时随着消息大小的增加而增加。大于128k的消息耗时较大,因为当与队列相关的内存满了的时候,会有硬盘交换。

同时要注意,从传输效率而言,如果在广域网上进行消息传输,消息太小会影响传输效率,因为对于每一消息,MQ都会有一个消息头,它会占有一定的字节数,如果把消息拆分太小,每个消息的传输头都会占据一定的开销。

4 对一个空队列的open,close 操作比非空队列的同样操作耗时要多。

第一次open队列耗时比接下来的open 耗时要多,对本地队列和远程队列的open,close耗时基本相同。

阅读更多

解决 ssh user@ip ‘command’ 出现 ‘command not found’的问题

环境 centos6.5
状况 A机器 ssh user@B机器 ‘command’ 执行命令(B机器添加了对A机器的信任)
提示 ‘bash: node: command not found’

使用 ssh user@B机器 手动执行命令是没有问题的 echo $PATH;node -v 也是正常的

-bash-4.1$ ssh root@B机器IP
Last login: Sat Jun 18 15:14:35 2016 from A机器IP
[root@IOS-Account ~]# echo $PATH;node -v
/data/soft/node/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin:/root/bin
v4.4.4

使用 ssh user@B机器 ‘echo $PATH;node -v’ 打印的环境变量路径 与login 方式打印的路径不一样.

-bash-4.1$ ssh root@B机器IP ‘echo $PATH;node -v’
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin
bash: node: command not found

根据这篇文章, 找到了原因.
以下这两个登录方式的环境变量是不一样的
ssh user@ip 登录以后是有交互的
ssh user@ip ‘command’ 登录以后直接执行命令,然后退出

最后解决方式是

ssh root@B机器IP ‘source ~/.bash_profile;echo $PATH;node -v’
1
结果:

-bash-4.1$ ssh root@B机器IP ‘source ~/.bash_profile;echo $PATH;node -v’
/data/soft/node/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin:/sbin:/root/bin
v4.4.4

原因总结:其实,就是SSH到远程机器的用户的环境变量,没有增加远程命令的执行权限与设置 。

Centos6.5 安装oracel11g 报Error in invoking target ‘nmo’ of makefie

Error in invoking target ‘nmo’ of makefile “/oracdb/oracle11g/sysman/lib/ins_emagent.mk”

Oracle Server: “Error in invoking target ‘*’ of makefile”
Posted on March 8, 2012
I ran into the following error while trying to install Oracle Server 11.2g on Red Hat Enterprise Linux 5.4:

Error in invoking target ‘nmo’ of makefile ‘/apps/opt/oracle/product/11.2.0/sysman/lib/ins_emagent.mk’. See ‘/u01/apb/oradata/oraInventory/logs/installActions2011-06-25_12-34-54PM.log’ for details.
1
Error in invoking target ‘nmo’ of makefile ‘/apps/opt/oracle/product/11.2.0/sysman/lib/ins_emagent.mk’. See ‘/u01/apb/oradata/oraInventory/logs/installActions2011-06-25_12-34-54PM.log’ for details.
This error specifically references ‘nmo’, but the same error is commonly encountered (with slightly different wording) for other modules.

The error log gives few additional details. There are a bunch of possible causes to this error – here are a few of the most common:

You haven’t installed all of your required prerequisite RPMs correctly, or failed to set up a link that’s causing Oracle to hit a makefile error
You’re trying to install the x84 version of Oracle Server on a 64-bit operating system. This can cause a slew of errors, but if you ignore them the install should still complete.
Incorrect system variables. Some users found that unsetting the variables LD_LIBRARY_PATH and JAVA_HOME can take care of this problem.