最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swoole?webSocket消息服務(wù)系統(tǒng)壓力測(cè)試解析

 更新時(shí)間:2023年03月14日 11:11:10   作者:stark張宇  
這篇文章主要為大家介紹了Swoole?webSocket消息服務(wù)系統(tǒng)壓力測(cè)試解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概述

編程的內(nèi)核是數(shù)學(xué),而測(cè)試的本質(zhì)是計(jì)算,專業(yè)名詞叫容量預(yù)估,而測(cè)試的大體就是用程序模擬程序,檢測(cè)程序的正確性,有兩個(gè)點(diǎn)需要注意,QPS最佳值和系統(tǒng)接收最大值,根據(jù)測(cè)試數(shù)據(jù)的反饋,針對(duì)測(cè)試的現(xiàn)象和反映進(jìn)行優(yōu)化。

Jmeter 的基礎(chǔ)使用

在所有的開發(fā)準(zhǔn)備就緒的時(shí)候,開始準(zhǔn)備和上線有關(guān)的事情:測(cè)試和服務(wù)部署,測(cè)試要注意代碼的邏輯嚴(yán)謹(jǐn)、代碼運(yùn)行的正確,服務(wù)穩(wěn)定,所有的一切都需要用數(shù)據(jù)做指標(biāo),所有的計(jì)算機(jī)編程歸根結(jié)底都是數(shù)學(xué)。

step.01 Thread Group 線程組設(shè)置

jmeter自帶的thread group非常簡(jiǎn)單。 一個(gè)thread 代表一個(gè)vuser,那么我們?nèi)绻枰嗌儆脩舨l(fā),設(shè)置多少線程數(shù)即可。ramp-up period, 本人理解是多少時(shí)間從0個(gè) vuser 上升到您指定的vusers數(shù)。從這些參數(shù)可以看,非常簡(jiǎn)單。但不能設(shè)置測(cè)試的時(shí)間,這一點(diǎn)不是特別善解人意。不過(guò)還好我們有jmeter plugins, 帶的thread group 添加了這個(gè)功能。

Number of Threads(users)  //并發(fā)線程(用戶)數(shù)
Loop Count //重復(fù)執(zhí)行次數(shù)

step.02 添加測(cè)試主體

右鍵單擊左側(cè)導(dǎo)航樹中的 Test Plan,選擇 Add > Threads(Users) > Thread Group ,右鍵單擊 Thread Group,選擇 Add > Sampler,可看到以下新增的采樣器選項(xiàng),具體說(shuō)明如下。

WebSocket Open Connection	// 建立一個(gè) WebSocket 連接
WebSocket Ping/Pong     	// 控制幀,發(fā)送 ping 并接收 pong
WebSocket request-response Sampler //	發(fā)送和接收文本或二進(jìn)制 WebSocket 幀
WebSocket Single Write Sampler	// 發(fā)送文本或二進(jìn)制 WebSocket 幀
WebSocket Single Read Sampler	// 接收文本或二進(jìn)制 WebSocket 幀
WebSocket Close	                // 關(guān)閉 Websocket 連接

step.03 添加結(jié)果樹 選擇 Add > Listener ,結(jié)果樹都在這個(gè)下面。

添加聚合報(bào)告,執(zhí)行測(cè)試,結(jié)果如下圖。

準(zhǔn)備測(cè)試數(shù)據(jù)

實(shí)踐01 - 準(zhǔn)備測(cè)試數(shù)據(jù)

1.隨機(jī)讀取用戶表里1000個(gè)用戶,進(jìn)行壓力測(cè)試

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

2.構(gòu)造測(cè)試需要的數(shù)據(jù)(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.查詢最大鏈接數(shù)命令

show variables like '%max_connections%';

4.查詢鏈接線程的狀態(tài)命令

show processlist; 

5.檢測(cè)服務(wù)器Mysql鏈接狀態(tài)的命令

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

實(shí)踐02 - 代碼部分

請(qǐng)求接口的Demo,主要的思考點(diǎn)在于用戶訪問(wèn)具有隨機(jī)性,模擬數(shù)據(jù)時(shí)盡量做到接近真實(shí)場(chǎng)景,代碼如下:

$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];
//隨機(jī)執(zhí)行結(jié)果
/**
Array
(
    [uid] => 166511
    [token] => f46540f11a40afeb9998cbe76661ec8234a87054
)
*/

Crontab的測(cè)試代碼Demo,先灌入測(cè)試數(shù)據(jù),考慮的是Crontab的實(shí)際吞吐能力,優(yōu)化計(jì)劃任務(wù)的執(zhí)行間隔,使用Curl和shell_exec實(shí)現(xiàn),執(zhí)行結(jié)果,返回?cái)?shù)據(jù) {"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;
}

在臨時(shí)執(zhí)行或停止計(jì)劃任務(wù),在執(zhí)行前加入時(shí)間毫秒的時(shí)間戳,可以打印代碼進(jìn)行耗時(shí)計(jì)算,代碼如下:

//返回當(dāng)前的毫秒時(shí)間戳
function msectime() {
    $stamptime = microtime();
    $arr = explode(' ',$stamptime );
    $msectime = sprintf('%.0f', (floatval($arr[0]) + floatval($arr[1])) * 1000);
    return $msectime;
}

總結(jié):

  • 并發(fā)鏈接和并發(fā)查詢:并發(fā)鏈接只是多消耗一點(diǎn)內(nèi)存,并發(fā)查詢才是CPU的殺手。
  • 對(duì)系統(tǒng)的流量提前進(jìn)行容量評(píng)估,歸根結(jié)底為計(jì)算問(wèn)題,不管多大的流量最后的解決辦法都采用分而治之的策略。
  • 手動(dòng)的效率太低,用程序測(cè)試程序。
  • 減少不必要的日志寫入,以減少磁盤I/O的傳輸。
  • 緩存和Mysql是一種平衡,需要去計(jì)算。

第5點(diǎn)特殊說(shuō)明有一點(diǎn)事特別需要強(qiáng)調(diào)的,不用被所謂的100w或者1000w流量的標(biāo)題嚇倒,比如1000w/h的訪問(wèn)量,Qps就變成了27777/s,每個(gè)用戶請(qǐng)求的熱門接口30個(gè),這才是測(cè)試的真相,關(guān)鍵地方使用內(nèi)存數(shù)據(jù)庫(kù)進(jìn)行加速,障礙就迎刃而解了:

10000000 / 60 / 60 / 30  = 925/s

以上就是Swoole webSocket消息服務(wù)系統(tǒng)壓力測(cè)試解析的詳細(xì)內(nèi)容,更多關(guān)于Swoole webSocket壓力測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于MySQL到MongoDB簡(jiǎn)易對(duì)照表的詳解

    基于MySQL到MongoDB簡(jiǎn)易對(duì)照表的詳解

    本篇文章是對(duì)從MySQL到MongoDB的簡(jiǎn)易對(duì)照表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP爬蟲框架盤點(diǎn)

    PHP爬蟲框架盤點(diǎn)

    大數(shù)據(jù)分析必定少不了數(shù)據(jù)抓取,只有擁有海量的數(shù)據(jù)才能對(duì)數(shù)據(jù)進(jìn)行對(duì)比分析。因此,網(wǎng)頁(yè)爬蟲是作為程序員必須要懂得技能,下文我將通過(guò)文字形式記錄下php的爬蟲框架的一些內(nèi)容。需要的小伙伴可以借鑒一下
    2023-04-04
  • php反引號(hào)與短標(biāo)簽?zāi)_本示例

    php反引號(hào)與短標(biāo)簽?zāi)_本示例

    這篇文章主要為大家介紹了php反引號(hào)與短標(biāo)簽的腳本示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 淺談Laravel核心解讀之Console內(nèi)核

    淺談Laravel核心解讀之Console內(nèi)核

    這篇文章主要介紹了淺談Laravel核心解讀之Console內(nèi)核,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • java微信開發(fā)之上傳下載多媒體文件

    java微信開發(fā)之上傳下載多媒體文件

    這篇文章主要為大家詳細(xì)介紹了java微信開發(fā)之簡(jiǎn)單實(shí)現(xiàn)上傳下載多媒體文件的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-06-06
  • PHP substr()函數(shù)參數(shù)解釋及用法講解

    PHP substr()函數(shù)參數(shù)解釋及用法講解

    substr() 函數(shù)返回字符串的一部分。這篇文章給大家介紹了PHP substr()函數(shù)參數(shù)解釋及用法講解,需要的朋友參考下
    2017-11-11
  • PHP利用正則表達(dá)式實(shí)現(xiàn)手機(jī)號(hào)碼中間4位用星號(hào)(*)替換顯示功能

    PHP利用正則表達(dá)式實(shí)現(xiàn)手機(jī)號(hào)碼中間4位用星號(hào)(*)替換顯示功能

    為了我們的隱私,所以我們把手機(jī)號(hào)碼部分?jǐn)?shù)字隱藏掉,今天小編給大家?guī)?lái)了PHP利用正則表達(dá)式實(shí)現(xiàn)手機(jī)號(hào)碼中間4位用星號(hào)(*)替換顯示,需要的朋友參考下吧
    2017-10-10
  • PHP實(shí)現(xiàn)打包zip并下載功能

    PHP實(shí)現(xiàn)打包zip并下載功能

    這篇文章主要介紹了PHP實(shí)現(xiàn)打包zip并下載功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-06-06
  • Laravel 5 框架入門(一)

    Laravel 5 框架入門(一)

    本文給大家介紹的是Laravel5框架入門的第一篇文章,主要給大家介紹些基礎(chǔ)的知識(shí),包括安裝配置,數(shù)據(jù)庫(kù)的建立與遷移,模型介紹,是篇非常不錯(cuò)的入門文章,這里推薦給大家。
    2015-04-04
  • Symfony2創(chuàng)建基于域名的路由相關(guān)示例

    Symfony2創(chuàng)建基于域名的路由相關(guān)示例

    這篇文章主要介紹了Symfony2創(chuàng)建基于域名的路由,結(jié)合實(shí)例形式分析了Symfony2路由的創(chuàng)建技巧,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

承德县| 砚山县| 金乡县| 六盘水市| 黎平县| 永福县| 五峰| 烟台市| 盈江县| 二连浩特市| 恩施市| 嘉祥县| 会东县| 张掖市| 澄城县| 晴隆县| 云龙县| 孙吴县| 施秉县| 江永县| 宁河县| 萍乡市| 晋宁县| 互助| 德惠市| 金乡县| 沙坪坝区| 清苑县| 龙游县| 浙江省| 稷山县| 武强县| 海淀区| 巴青县| 五指山市| 噶尔县| 峨眉山市| 彩票| 湟源县| 通许县| 康保县|