分布式压力测试工具

时间:2020-12-11 11:40:43

是否有这样的场景:公司需要选型某类产品,需要你来做压力测试。运维部门分给你几台服务器,剩下的自己搞定。

请问:你是如何做压力测试的?如何获取性能参数、系统负载的?如果需要测试的产品是分布式的,需要N台client压M台Server,又怎么办?数据分析如何做?

你是否是每次手动启动client和server,手动使用excel复制粘贴所有的数据?或者通过截图的方式从ganglia上截取服务器负载等情况?

理想中的压力测试应该是这样的:

分布式压力测试工具

你是否想要一个工具,将测试代码放到一定的目录下,执行启动命令,系统自动启动server、启动压力测试程序、定期收集数据。测试完成后自动收集所有服务器数据并生成报告?

perf-runner可以方便的解决上述问题。

使用方法

1、安装

git clone git@github.com:haitaoyao/perf-runner.git
画图需要使用gnuplot,同步文件需要rsync,仅仅在master安装:apt-get install gnuplot-x11 rsync

2、部署压力测试程序

一个性能测试需要一个名称。部署时将整个目录放在deploy目录下。 由于可能会涉及多个服务器组的启动,因此,perf-runner引入test-unit概念,一个test-unit是一组服务器,需要部署同样的代码或启动同样的程序。比如,测试多台memcached,所有的memcached server作为一个test-unit,先于测试代码启动;测试代码在memcached-server全部启动后启动开始测试。perf-runner中,test-unit按照文件夹的名称字母顺序从小到大启动。 比如,压力测试程序test,有两个test-unit:test-unit1和test-unit2,目录结构如下: 分布式压力测试工具
其中每个test-unit中start.sh 用于启动程序,stop.sh用于停止程序。servers.conf中配置服务器地址。例如test/test-unit1/servers.conf  内容如下: 分布式压力测试工具

3、启动压力测试集群

压力测试集群模型如下: 分布式压力测试工具
所有的测试启动脚本放在master,启动时master自动同步脚本到各个服务器并执行。因此master需要有各个server的信任关系,方法如下: 在master执行:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
$ ssh-copy-id ${server_address}
确保从master登陆所有的服务器不需要输入密码


启动压力测试集群:
$sh bin/start.sh -n test

输出如下:

start server_group: test_unit1
perf_test: test server_group: test_unit1 server: 10.130.137.169 start successfully
start server_group: test_unit2
perf_test: test server_group: test_unit2 server: 10.130.137.169 start successfully

##############################################
#
# perf test: test
# perf uuid: test__20110920.233504.
# started
#
##############################################
集群启动成功,其中perf uuid为此次测试的唯一标识,保留以供后续查询。

4、查看集群状态

在master输入:

sh bin/status.sh -ntest -u test__20110920.233504.

其中 -ntest表示要查看名为test的压力测试,-u test__20110920.233504. 表示压力测试uuid为test__20110920.233504.

输出如下:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

test unit: test_unit1
perf_test: test status @ 10.130.137.169:
perf_test: test__20110920.233504. is still alive
collector: cpu_load(pid: 7453) is alive
collector: cpu_usage(pid: 7454) is alive
collector: iostat(pid: 7455) is alive
collector: memory(pid: 7456) is alive
collector: network(pid: 7457) is alive

###############################################


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

test unit: test_unit2
perf_test: test status @ 10.130.137.169:
perf_test: test__20110920.233504. is still alive
collector: cpu_load(pid: 7872) is alive
collector: cpu_usage(pid: 7873) is alive
collector: iostat(pid: 7874) is alive
collector: memory(pid: 7875) is alive
collector: network(pid: 7876) is alive

###############################################

如果想查看服务器当前性能状态,可以使用bin/monitor.sh .例如:

sh bin/monitor.sh -n test -u test__20110920.233504. -i 5 -c cpu_load
表示查看 压力测试test uuid test__20110920.233504. 的cpu_load情况, 刷新间隔为5秒,输出如下:

                 perf_test: test, uuid: test__20110920.233504., collector: cpu_load, time: 2011-09-20 23:40:43
test unit: test_unit1
10.130.137.169: 20110920234050, 0.16, 0.07, 0.06
test unit: test_unit2
10.130.137.169: 20110920234052, 0.16, 0.07, 0.06


perf_test: test, uuid: test__20110920.233504., collector: cpu_load, time: 2011-09-20 23:40:50
test unit: test_unit1
10.130.137.169: 20110920234055, 0.15, 0.07, 0.06
test unit: test_unit2
10.130.137.169: 20110920234057, 0.15, 0.07, 0.06

Ctrl+C停止输出。

5、停止压力测试,生成报告

使用 bin/stop.sh 停止压力测试。例如:

haitao-yao-MBP:perf-runner haitao$ sh bin/stop.sh -ntest -u test__20110920.233504.
stop perf unit: test_unit1
stop perf_test: test @ 10.130.137.169:
test stopped
collector: cpu_load(pid: 7453) killed
collector: cpu_usage(pid: 7454) killed
collector: iostat(pid: 7455) killed
collector: memory(pid: 7456) killed
collector: network(pid: 7457) killed

stop perf unit: test_unit2
stop perf_test: test @ 10.130.137.169:
test stopped
collector: cpu_load(pid: 7872) killed
collector: cpu_usage(pid: 7873) killed
collector: iostat(pid: 7874) killed
collector: memory(pid: 7875) killed
collector: network(pid: 7876) killed

Fetch result for test unit: test_unit1
result from 10.130.137.169 fetched
Fetch result for test unit: test_unit2
result from 10.130.137.169 fetched
cleanup result for test unit: test_unit1
result from 10.130.137.169 deleted
cleanup result for test unit: test_unit2
result from 10.130.137.169 deleted
结果数据收集在 $PER_RUNNER_HOME/data/${perf_test_name}/${perf_test_uuid},收集后,测试服务器的数据随即被删除。

生成报告,使用bin/report_server.sh 

 sh bin/report_server.sh -ntest -u test__20110920.233504. -p8080

打开浏览器 http://${master server ip}:8080/report.html , 至今为止,会有cpu_usage, cpu_load, memory, network, iostat 的报告。例如cpu load 图片如下:

分布式压力测试工具

还可以下载源数据进行进一步的分析!


6、总结

这就是perf runner,希望对大家有用。玩儿的开心!

-- EOF --