一、简介
Locust是一款使用Python编写的压力测试工具,本篇总结会介绍在实际测试过程中遇到的问题,不会介绍入门的操作,详情可以看官网的入门教程。
https://www.locust.io/
使用Locust的原因是因为可以模拟的用户数量可以通过添加硬件来增长,相对于jmeter来说配置更加方便。
二、需求描述
项目采用node+redis+oracle的模式,需要测试出单台服务器的性能瓶颈。
三、实际测试
环境的搭建:服务器上只需要安装好Python2.7及以上的版本,然后通过pip安装locust就完成了搭建。
脚本编写:根据需求编写好python脚本,放到服务器上如 locu.py。
脚本运行:通常使用的是主从模式来运行脚本,这样能够方便进程多开。
locust -f locu.py --master 该命令运行后会生成一个主进程进行管理,主进程只需要一个。
locust -f locu.py --slave 该命令运行后会有一个子进程启动,根据需要可以多次运行就会开启多个子进程,子进程用来模拟用户数量。
以上命令运行后或默认开启8089 端口,通过浏览器访问本地8089端口就能进入web界进行控制。
访问地址: http://localhost:8089,slave 就是开启的子进程数量。
四、防坑指南
1.如果实在Linux服务器运行locust,尴尬的是没有图形界面操作web。
解决措施:一般连接服务器都是通过xshell来连接,我们可以通过xshell自带隧道功能建立一条隧道,将服务器8089端口的信息传输到本地计算机,这样直接在本地计算的浏览器就能对服务器进行控制。
xshell >隧道窗格>转移规则>右键添加
2.后台运行命令,防止命令中断
通过xshell访问到服务器后,如果运行locust -f locu.py --master ,一旦xshell退出,命令也会自动中断。因为通过xshell登录所运行命令都属于登录用户进程的子进程,一旦断开连接主进程会自动关闭,该进程下所有命令都会自动关闭。所以如果是长时间运行的话最好把命令放在后台运行。
(locust -f load.py --master &) 该命令表示把该进程放置到后台运行,就算用户断开连接也会一直运行。
放置到后台后果想要关闭命令就先使用ps -ef|grep locust 查看进程号,再用kill pid 来杀掉进程。
3.用户数量的详细解释
web界面的user 数量表示并发数,也就是每次访问的并发连接数。实践的时候用户数量是300,表示每次访问有300个用户同时访问,吞吐量能达到2000/s,说明在一秒的时间内服务器响应了大约7次,那么300的用户耗费的时间就是140ms左右。
4.用户数量与slvae关系
用户数量是300,slave为3,那么每个slave会平均分配发送的用户量100,与jmerter分布式不一样。
五、最终测试结果
服务器配置:CPU 8核 内存16G
承受最大业务量900万次请求数,占用内存12G,占用磁盘空间23G。
redis与业务量关系 80万请求数占用1G redis内存
磁盘与业务量关系 80万请求数占用2G 磁盘空间