websocket压测过程
【内容或版权原因,部分内容未显示】
目录
测试资源
- 1台被压测机器
- centos版本信息参考线上服务器
- 双核4G
- 业务服务部署:ws服务(golang实现websocket的一个服务)、redis服务(本地6379端口)
- 监测服务:prometheus、grafana、cacti。需要监测服务器资源使用情况、需要监测go服务使用情况
- 系统配置调整:ulimit
- 2台压力机器
- 双核2G内存
- ubuntu18及以上。
- 服务部署:最新jdk、jmeter服务安装与配置(slave)
- 1台压力控制机
- 单核1G内存,连接操作顺畅即可
- 服务部署:最新jdk、jmeter服务安装与配置(master)
- 其他
- 竞价实例
- 4台机器在同一个局域网内
- 关闭防火墙
测试环境准备
系统配置调整
-
ulimit调整系统文件
临时调整了ulimit为50000,默认是1024,会影响数据库、redis等服务连接数
修改/etc/security/limits.conf文件,在文件中添加如下行,修改系统对所有用户的软限制(软限制是指限制用户同时打开的文件数目,硬限制是指系统根据硬件资源(主要指内存)计算出来的最多可打开的文件数目)
* soft nofile 60000 * hard nofile 60000
redis
yum install redis
定期删除redis所有数据:
flushall
定制ws服务
- 调整token机制,避免泄露
- 增加控制端与被控制端连接统计,提供给prometheus采集
分支:jm-loadtest
配置文件:config.cfg(参考测试环境)
jmeter服务
-
jdk
master控制机、slave压力机需要使用相同版本的jdk。
-
jmeter
master控制机、slave压力机安装相同版本的jmeter
-
下载
-
解压到指定位置
比如unix可以尝试放在/usr/local/jmeter下
windows环境,解压可以执行GUI界面即可。
-
unix环境配置全局环境变量
vim /etc/profile
export JMETER=/usr/local/jmeter export PATH=$JMETER/bin:$PATH source /etc/profile
-
-
配置master控制机
修改master控制机bin/jmeter.properties配置,添加需要控制的远程压力机:
remote_hosts=192.168.232.128:1099
不启用ssl:
server.rmi.ssl.disable=true
修改bin/system.properties配置,用于告知slave回传数据给master的地址:
java.rmi.server.hostname=192.168.232.131
-
配置slave压力机
用于与master的数据传输,比如master发送脚本到slave,salve发送结果给master,修改bin/jmeter.properties配置:
# RMI port to be used by the server (must start rmiregistry with same port) server_port=1099
不启用ssl
server.rmi.ssl.disable=true
测试数据
- 10万个phone用户数据
- 20万个web用户数据,2个web用户与1个phone用户关联,也就是1个控制端对应2个被控制端
暂时提供csv的参数化方式,没有使用JDBC的方式直接数据库。需要将参数配置数据同时上传到压力机jmeter-server启动的目录下(注意相对路径)
附:测试数据生成存储过程
【内容或版权原因,部分内容未显示】...
pan>"-Xms2g -Xmx2g -XX:MaxMetaspaceSize=512m"
注意:setenc.sh文件,因为md文档原因,缺失了shell文件头,需要自己补充
Apache JMeter - User’s Manual: Getting Started
解决3:
由于已经不是堆的问题,超出RAM的问题,只能应加机器,或提升内存。
5、jtl文件太大,在linux上生成报告问题
目前最新的jdk17不支持jmeter在linux上生成报告。
需要降级到jdk16