漫游测试之性能测试(4.5.性能测试工具中的监控方法)
4.5.1Loadrunner的监控
Loadrunner 的windows监控,在开启监控之前,需要在远程机器中启动以下2个服务。
并同时需要注意一下安全选项的设置。
在Loadrunner Controller中填入要监控的IP,选择相对应的性能计算数器即可。
删除默认的,只选择自己要用的性能计数器。性能计数器不易过多,因为性能计数器其本身是需要通过网络传输回来的,过多会占有一点带宽,并且也不易于抓重点。建议,当出现某方面瓶颈问题时,根据瓶颈方面细化监控的性能计数器。
监控windows大多数的时候,添加以下性能计算器即可。
添加性能数器后,系统监控就开始了。
Loadrunner利用Rstatd监控linux
下载rstatd后解压:tar -zxvf rpc.rstatd-4.0.1.tar.gz。
./configure
Make&&make install
可能会遇到以下问题:
[email protected]:/usr/rpc.rstatd-4.0.1# rpc.rstatd
Cannot register service: RPC: Unable to receive; errno = Connection refused
安装apt-get install nfs-kernel-server
apt-get install portmap
关闭防火墙
/etc/init.d/iptables stop
然后返回Loadrunner同windows一样进行添加性能计数器
但是出现以下问题:
Monitor name :UNIX Resources. Internal rpc error (error code:2). Machine: 10.170.9.189. Hint: Check that RPC on this machine is up and running. Check that rstat daemon on this machine is up and running (use rpcinfo utility for this verification). Details: RPC: RPC call failed.
RPC-TCP: recv()/recvfrom() failed.
RPC-TCP: Timeout reached. (entry point: Factory::CollectData). [MsgId: MMSG-47197]
根据以下的资料的显示,Rstatd的方式Loadrunner本身是有问题,推荐使用SiteScope的方式进行监控。
https://www.cnblogs.com/miniren/p/7865219.html
https://stackoverflow.com/questions/21156371/loadrunner-monitoring-linux-counters-gives-rpc-error
而SiteScope是收费软件,故推荐linux的使用vmstat即可。
4.5.2Jmeter的监控
Jmeter Windows和Linux下的方法相同。
下载图示插件后丢入.\lib\ext目录中,重启Jmeter即可。
选择[email protected] Metrics Collector进行服务器资源监控。
也可以下载plugins-manager.jar直接进行插件管理的方式进行下载。
更新插件。
到以下地址下载ServerAgent-2.2.1,在要监控的机器上启动即可。
https://jmeter-plugins.org/wiki/PerfMonAgent/
添加IP和性能计数器进行选择,即可(选择哪些性能计数器,可以参数Loadrunner中的对应的性能计数器)。
报这个错误,查询后说是jmeter版本过高,插件不支持,需要将jmeter降级到3.1版本。
java.lang.NoSuchMethodError:org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter
更新jmeter和插件后重新运行即可。注意,选择的性能计数器要正确,否则可能报以下错误。
正确的配置:
4.5.3在linux中批量进行vmstat的监控
调用Python的paramiko模块,可以对服务端进行同时命令执行,注意vmstat执行后是后台执行的,结束监控时需要killall。
主要脚本代码如下:
import paramiko
import threading
def sshCommand(ip, port, username, pwd, commands):
try:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
client.connect(ip, 22, username, pwd, timeout=30, allow_agent=False, look_for_keys=False)
# client.connect(ip, 22, username, pwd, timeout=30, allow_agent=False)
for cmd in commands:
stdin, stdout, stderr = client.exec_command(cmd)
# stdin.write('Y')
out = stdout.readlines()
for outprint in out:
print '%s' % (ip)
print outprint
print '------------------------------------------------\n'
except Exception, e:
print('%s:%s Error\n,reason=%s' % (ip, port, e))
finally:
client.close()
if __name__ == "__main__":
orderList = [{'ip': '10.xxx.8.xxxx', 'port': 22, 'username': 'root', 'password': 'xxxxxx', 'cmd': ['vmstat -t 5 > /usr/test.txt ']},{'ip': '10.xxx.138.xxxx', 'port': 22, 'username': 'root', 'password': 'xxxxxx','cmd': ['vmstat -t 5 > /usr/test.txt ']}]
#监控结束时,kill掉进程,让监控停止
#orderKill = [{'ip': '10.xxx.8.xxxx', 'port': 22, 'username': 'root', 'password': 'xxxxxx', 'cmd': ['killall vmstat']},{'ip': '10.xxx.138.xxxx', 'port': 22, 'username': 'root', 'password': 'xxxxxx','cmd': ['killall vmstat']}]
for order in orderList:
ssh_connet = threading.Thread(target=sshCommand,
args=[order['ip'], order['port'], order['username'], order['password'],
order['cmd']])
ssh_connet.start()
注意,vmstat生成的文本格式,可以在Excel中导入,生成Excel的方式,产生数据。
vmstat监控输出到文件中的数据,每20行后,有新的标题行在导入到Excel中前处理时需要删除这些标题行,可以利用sed命令删除。
sed -e '/proce/,/r/d' vmstat.txt > movmstat.txt
Vmstat数据格式的处理可以参考这篇文章:
http://blog.****.net/aovenus/article/details/6167581