Swoole - webSocket消息服务系统压力测试篇|天天新动态

来源: 腾讯云 时间:2023-03-10 07:19:26

概述

编程的内核是数学,而测试的本质是计算,专业名词叫容量预估,而测试的大体就是用程序模拟程序,检测程序的正确性,有两个点需要注意,QPS最佳值和系统接收最大值,根据测试数据的反馈,针对测试的现象和反映进行优化。

Jmeter 的基础使用

在所有的开发准备就绪的时候,开始准备和上线有关的事情:测试和服务部署,测试要注意代码的逻辑严谨、代码运行的正确,服务稳定,所有的一切都需要用数据做指标,所有的计算机编程归根结底都是数学。

step.01 Thread Group 线程组设置

jmeter自带的thread group非常简单。 一个thread 代表一个vuser,那么我们如果需要多少用户并发,设置多少线程数即可。ramp-up period, 本人理解是多少时间从0个 vuser 上升到您指定的vusers数。从这些参数可以看,非常简单。但不能设置测试的时间,这一点不是特别善解人意。不过还好我们有jmeter plugins, 带的thread group 添加了这个功能。


(资料图片仅供参考)

Number of Threads(users)  //并发线程(用户)数Loop Count //重复执行次数

step.02 添加测试主体

右键单击左侧导航树中的 Test Plan,选择 Add > Threads(Users) > Thread Group ,右键单击 Thread Group,选择 Add > Sampler,可看到以下新增的采样器选项,具体说明如下。

WebSocket Open Connection// 建立一个 WebSocket 连接WebSocket Ping/Pong     // 控制帧,发送 ping 并接收 pongWebSocket request-response Sampler //发送和接收文本或二进制 WebSocket 帧WebSocket Single Write Sampler// 发送文本或二进制 WebSocket 帧WebSocket Single Read Sampler// 接收文本或二进制 WebSocket 帧WebSocket Close                // 关闭 Websocket 连接

step.03 添加结果树 选择 Add > Listener ,结果树都在这个下面。

添加聚合报告,执行测试,结果如下图。

准备测试数据

实践01 - 准备测试数据

1.随机读取用户表里1000个用户,进行压力测试

select user_id from user where user_status = 1ORDER BY RAND() limit 1000;

2.构造测试需要的数据(10w条为例)

drop procedure idata;delimiter ;;create procedure idata()begin  declare i int;  set i=1;  while(i<=100000 )do    insert into t2 values(i, i, i);    set i=i+1;  end while;end;;delimiter ;call idata();

3.查询最大链接数命令

show variables like "%max_connections%";

4.查询链接线程的状态命令

show processlist; 

5.检测服务器Mysql链接状态的命令

netstat -ant|grep ESTABLISHED|grep 3306 | wc -l

实践02 - 代码部分

请求接口的Demo,主要的思考点在于用户访问具有随机性,模拟数据时尽量做到接近真实场景,代码如下:

$str = "62210,45783,36209,146502,24599,168338,166511,1917...";$uidTestArr = explode(",",$str);foreach ($uidTestArr as $uid){    if(isset($uid) && intval($uid) > 0){        $json = file_get_contents("http://open.stark.com/login/gettoken?uid=". $uid);        $json = json_decode($json,true);        $temp[] =   [ "uid" => $uid , "token" => $json["token"]  ];    }}$index = rand(0,count($temp) - 1);$randData =  $temp[$index];//随机执行结果/**Array(    [uid] => 166511    [token] => f46540f11a40afeb9998cbe76661ec8234a87054)*/

Crontab的测试代码Demo,先灌入测试数据,考虑的是Crontab的实际吞吐能力,优化计划任务的执行间隔,使用Curl和shell_exec实现,执行结果,返回数据 {"code":200,"result":[],"msg":"OK"}

$str = "62210,45783,36209,146502,24599,168338,166511,1917,135799,8326...";//去掉可能存在的换行和空格$str = str_replace(array(PHP_EOL, " " ,"",$str));$testUsers = explode(",",$str);for ($i=0;$i<10000;$i++){    $index = rand(0,99);    $uid = $testUsers[$index];    $msg = "{\"rid\":225,\"uid\":".$uid.",\"top_rid\":225,\"module\":\"novel_chapter\",\"module_name\":\"1022 last dance \u7b2c13\u7ae0\",\"module_id\":1019712,\"module_nid\":163961,\"comment_uid\":268,\"comment_nickname\":\"\u6d4b\u8bd5\u5c0f\u5b9d\u8d1d\",\"content\":\"\u4f60\u597d\u554a\",\"gift_id\":0,\"gift_name\":\"\",\"gift_number\":0}";    $url = "http://msgdev.stark.com/api/comment/message";    $json = shell_exec( "curl -d "uid={$uid}&msg={$msg}" {$url} " );    echo   "i:".$i.",json:".$json.PHP_EOL;}

在临时执行或停止计划任务,在执行前加入时间毫秒的时间戳,可以打印代码进行耗时计算,代码如下:

//返回当前的毫秒时间戳function msectime() {    $stamptime = microtime();    $arr = explode(" ",$stamptime );    $msectime = sprintf("%.0f", (floatval($arr[0]) + floatval($arr[1])) * 1000);    return $msectime;}

总结:

并发链接和并发查询:并发链接只是多消耗一点内存,并发查询才是CPU的杀手。对系统的流量提前进行容量评估,归根结底为计算问题,不管多大的流量最后的解决办法都采用分而治之的策略。手动的效率太低,用程序测试程序。减少不必要的日志写入,以减少磁盘I/O的传输。缓存和Mysql是一种平衡,需要去计算。

第5点特殊说明有一点事特别需要强调的,不用被所谓的100w或者1000w流量的标题吓倒,比如1000w/h的访问量,Qps就变成了27777/s,每个用户请求的热门接口30个,这才是测试的真相,关键地方使用内存数据库进行加速,障碍就迎刃而解了:

10000000 / 60 / 60 / 30  = 925/s

X 关闭

热门推荐

圆形n95口罩的正确戴法?

2023-03-10   南方养生网

闪亮的日子

2023-03-09   北京青年报官网

城市副中心打造国际消费体验区 百事通

2023-03-09   北京青年报官网

金叵罗“长”出小米酥

2023-03-09   北京青年报官网

燕京首次推出“可以喝的玻尿酸”啤酒

2023-03-09   证券时报e公司

如何取消不需要的iPhone订阅

2023-03-09   万能网

北京多区延长流感疫苗接种服务

2023-03-09   北京日报客户端

国内功率最大电动压裂装置成功应用

2023-03-09   中国产业经济信息网

全球最大钛-钢复合板高压精馏塔成功吊装

2023-03-09   中国产业经济信息网

国内首艘氢电双动力商用船开始建造

2023-03-09   中国产业经济信息网

江苏泰隆集团勇于创新促转型

2023-03-09   中国产业经济信息网

多情江山电视剧剧情介绍

2023-03-08   万年历

聚焦两会,百姓关注什么食品话题?

2023-03-08   中国食品报官方平台

生态种养 脱贫奔小康的“她”力量 全球通讯

2023-03-08   中国网·中国发展门户网

【MySQL】存储引擎

2023-03-08   腾讯云

全球最新:倪虹:城市更新是城市化发展的必然过程

2023-03-08   中国网·中国发展门户网

快资讯丨急救电话

2023-03-08   互联网

每日快讯!刘喜奎

2023-03-08   互联网

【建设农业强国之路】五年来 护航粮食安全 天天观点

2023-03-08   中国网·中国发展门户网

最新:张新民委员:培养拔尖人才需从小开始

2023-03-08   ​中国网·中国发展门户网

高铁智能化勘测有了“中国方案”

2023-03-08   中国产业经济信息网

g3随e行怎么用-世界报资讯

2023-03-08   万年历

今年东城将建成1300套保障性住房

2023-03-08   北京青年报官网

梵音瑜伽经营异常 天天看热讯

2023-03-08   企查查财经

中国水晶网

2023-03-07   互联网

两会丨接受采访|世界信息

2023-03-07   新华社全媒报道平台

天天快报!log是什么意思

2023-03-07   万年历

货拉拉开放跑腿骑手0抽佣注册

2023-03-07   和讯李显杰

王小谟的家风

2023-03-07   知社学术圈

爸爸的姐姐我应该叫什么

2023-03-07   万年历

Copyright   2015-2022 中国行业信息网版权所有  备案号:   联系邮箱:29 59 11 57 8@qq.com