记录一次项目部署在阿里云的1万压测
场景:与往常测试不同,这次项目部署在阿里云服务器上面,需要在外网对其进行高并发压测(10000并发),这时需要考虑一个在内网压测不用考虑的因素,就是带宽。因为带宽的瓶颈不仅影响项目服务器的性能也影响jmeter负载机的压测力度。
压力机准备:
开了4台阿里云ESC服务器:
控制机:win2012r2(选择win,是因为控制机不参与压测,只是分发命令和接收数据,可视化会更好一点)
奴隶机(负载机)4台:linux
具体配置如下图:
途中遇到的问题和解决办法:
问题:jmeter提示内存溢出,但是修改jmeter.bat中的 set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m,将xms和xmx改大以后,运行会报错。
原因1:机子本身内存太小,不足于承受修改后的xms。
解决:增加内存
原因2:jdk是32位的,32位的有上限
解决:jdk换成64位的
问题:控制机的带宽占满
原因:由于高并发,多台负载机与控制机做数据交互,负载机将响应结果返回给控制机这个过程占用的带宽是非常多的。
解决:租用的控制机和负载机确保是同个局域网,配置的时候使用内网ip进行配置,这样控制机和负载机的数据交互走的就是内网而不是外网。而阿里云的内网带宽上限是5G,这样是足够用的。
问题:单台并发不能太高,否则会影响测试结果(比如我们设置单台5000,我们以为有5000并发,其实只达到1000的效果),一万并发的话需要10台服务器充当负载机,服务器资源利用率低,成本太高。
原因:jmeter本身性能瓶颈导致。
解决:同一台服务器复制多个jmeter包,每个jmeter对应一个端口,这样可以同时启动多台,最大程度的利用负载机服务器资源。(目前经测试,8核32G配置分三台,每台800并发效果会好点)