最近在需要在云主机上进行压力测试,所以需要Linux的Agent。
一、安装:教程可以百度,大概步骤如下:
1、Upload Linux.zip to 指定的机器
2、解压,chmod 777 $Linux/installer.sh
3、执行Linux下的installer.sh
按照提示安装下去即可。
二、环境变量配置(基于bsh)
1、在/opt/HP/HP_LoadGenerator/新增env.sh文件,内容如下:
#!/bin/bsh export PRODUCT_DIR="/opt/HP/HP_LoadGenerator" export M_LROOT="/opt/HP/HP_LoadGenerator" export LD_LIBRARY_PATH=$M_LROOT/bin:$M_LROOT/lib:/usr/lib export DISPLAY=‘0.0‘ export PATH=$PATH:${M_LROOT}/bin
2、修改该文件的使用属性
chmod 777 env.sh
3、在环境变量中使用该文件,在/etc/profile 和/etc/bashrc 最后加入:
source /opt/HP/HP_LoadGenerator/env.sh
4、用户重新登陆,检查环境变量是否生效
echo $PRODUCT_DIR echo $M_LROOT echo $LD_LIBRARY_PATH echo $PATH
5、执行/opt/HP/HP_LoadGenerator/bin/verify_generator
提示各种glibc缺失,需要自行安装。最特殊的是glibc++.so.5,需要手动单独安装。
特殊说明:此处提示${M_LROOT},${LD_LIBRART_PATH}找不到时,可以先忽略不管(前提步骤4的结果都正确)。
遇到的问题:
(1)/opt/HP/HP_LoadGenerator/bin/lrv/limithost: /opt/HP/HP_LoadGenerator/bin/lrv/chk_thread_lmt: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
sudo yum install glibc.i686
(2)/opt/HP/HP_LoadGenerator/bin/lrv/chk_thread_lmt: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory
/opt/HP/HP_LoadGenerator/bin/lrv/limithost: line 134: [: : integer expression expected
sudo yum install libgcc-4.4.7-11.el6.i686.rpm
6、关闭防火墙等其他安全通信策略
7、启动linux agent 进程(在/opt/HP/HP_LoadGenerator/bin/下)。成功后可以看到进程号,如果失败在/tmp下有个m_daemon***.log 文件去查看失败原因。
./m_daemon_setup start
三、controller连接、场景试跑,报错:Not all extension Dlls were loaded
分析:开始以为本地Dll路径不对,百度一下,HP的论坛里这个问题很多人提问,但回答都说是linux agent的配置错误。
下面就回过头来看./verify_generator时产生的错误并彻底解决他们
1.${M_LROOT}找不到
解决 M_LROOT变量找不到的问题修改: /opt/HP/HP_LoadGenerator/bin/lrv/vusrchk中288行,将unset M_LROOT下移到289行后面
269 my_shell="/bin/$my_shell" 270 else 271 temp=`$my_shell -c ‘ echo MERCURY ‘ 2> /dev/null` 272 if [ "$temp" = "MERCURY" ];then 273 echo "Failed $trail" 274 remote_install=1 275 echo "_____Failed to run $my_shell. $trail" 276 exit 1 277 fi 278 fi 279 fi 280 281 if [ $found_ksh != 0 ]; then 282 ENV="$HOME/.profile" 283 export ENV 284 fi 285 286 echo $ECHO_N "Verify \$M_LROOT ...$ECHO_C" 287 save_m_lroot="$M_LROOT" 288 #unset M_LROOT 289 temp=`$my_shell -c ‘ echo MERCURY $M_LROOT ‘ 2> /dev/null` 290 unset M_LROOT 291 new_m_lroot=`echo $temp | $SED -e ‘s/.*MERCURY[ ]*\(.*\)/\1/‘` 292 293 if [ "$new_m_lroot" = "" ]; then 294 echo "Failed $trail" 295 remote_install=1 296 echo "_____It was not possible to set the \$M_LROOT from $trail" 297 echo "_____the shell dot files. One of several things might be happening: $trail" 298 echo "_____1) \$M_LROOT is not set at all in the shell dot files. $trail" 299 echo "_____2) There is some error in the shell dot files which stops their execution $trail" 300 echo "_____ before it sets \$M_LROOT. $trail" 301 echo "_____3) There is conditional code in the shell dot files (most likely related to $trail" 302 echo "_____ interactive and non interactive shells) and \$M_LROOT is set $trail" 303 echo "_____ only in one of the sections. $trail" 304 echo "_____Aborting virtual user tests on host `$HOSTNAME` $trail"
2、找不到${LD_LIBRARY_PATH}
解决LD_LIBRARY_PATH找不到的问题:将/opt/HP/HP_LoadGenerator/bin/lrv/vusrchk中356行,改成357行内容。
348 case "$os_name" in 349 HP-UX) 350 temp=`$my_shell -c ‘ echo MERCURY $SHLIB_PATH ‘ 2> /dev/null` 351 ;; 352 AIX) 353 temp=`$my_shell -c ‘ echo MERCURY $LIBPATH ‘ 2> /dev/null` 354 ;; 355 SunOS|Linux) 356 #temp=`$my_shell -c ‘ echo MERCURY $LD_LIBRARY_PATH ‘ 2> /dev/null` 357 temp=`$my_shell -c ‘ echo MERCURY ${M_LROOT}/bin ‘ 2> /dev/null` 358 ;; 359 esac
3、解决找不到libdriver.so的问题
Verify running the product executables...Failed _____Failed to run the product executables. _____Error: mdrv: error while loading shared libraries: libdriver.so: cannot open shared object file: No such file or directory
(1) 先find下,看下libdriver.so所在目录
[[email protected] bin]$ find . -name "libdriver.so" ./libdriver.so [[email protected] bin]$ pwd /opt/HP/HP_LoadGenerator/bin
(2)将该路径加入/opt/HP/HP_LoadGenerator/bin/lrv/vusrchk 文件中
修改/opt/HP/HP_LoadGenerator/bin/lrv/vusrchk,在483行处再加入一次这个lib的路径:export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/${M_LROOT}/bin
469 echo $ECHO_N "Verify that the product executables are run from \$M_LROOT/bin...$ECHO_C" 470 which_mdrv=`$my_shell -c ‘which mdrv‘ | $AWK ‘{which_mdrv=$0} END{print which_mdrv}‘` 471 if [ "$which_mdrv" != "$PRODUCT_DIR/bin/mdrv" ]; then 472 wrong_path=`echo $which_mdrv | $SED -e ‘s/\/mdrv//‘` 473 echo "Failed $trail" 474 remote_install=1 475 echo "_____The product executables are run from $wrong_path $trail" 476 echo "_____and not from $PRODUCT_DIR/bin. $trail" 477 echo "_____Make sure that the PATH environment variable contains $trail" 478 echo "_____$PRODUCT_DIR/bin before $trail" 479 echo "_____$wrong_path. $trail" 480 exit 1 481 else 482 echo "OK $trail" 483 fi 484 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/${M_LROOT}/bin 485 486 echo $ECHO_N "Verify running the product executables...$ECHO_C" 487 rm -f /tmp/verify_mdrv_err.txt 488 if [ $found_ksh != 0 ]; then 489 $my_shell -c ‘(mdrv > /dev/null) 2> /tmp/verify_mdrv_err.txt‘ > /dev/null 490 else 491 $my_shell -c ‘(mdrv > /dev/null) >& /tmp/verify_mdrv_err.txt‘ > /dev/null 492 fi
至此./verfify_generator 已可以验证通过。
启动: ./m_daemon_setup start 执行成功。
四、再次使用Control验证“Not all extension Dlls were loaded”,该问题消失。
It work!~~~
五、总结:
M_LROOT、LD_LIBRARY_PATH和libdriver.so找不到,主要原因是LR提供的/opt /HP/HP_LoadGenerator/bin/lrv/vusrchk脚本中代码存在问题引起.写在这里,方便各位测试同仁遇到问题时不会无厘头的到处查问题,少走些弯路。当然我的代码中使用写死的办法完全是“头痛医头,脚痛医脚”的方法,后续有时间时会继续针对该代码进行调整,以解决代码通用性问题,欢迎各位点赞或拍砖!~