GatewayWorker 壓測在3000多的時候就上不去了,報 worker[none:3956] exit with status 9
服務器:2核4G ; centos
這里寫問題具體描述
內(nèi)核已經(jīng)按照文檔優(yōu)化:
按照http://www.wtbis.cn/doc/workerman/debug/busy-process.html 追蹤:
也并沒有什么可疑點
以下是壓測代碼
<?php
require_once __DIR__ . '/../../vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;
/**
* 連接數(shù)壓力測試demo
*/
$worker = new Worker();
$worker->onWorkerStart = 'connect';
function connect(){
static $count = 0;
// 5000個鏈接
if ($count++ >= 5000) return;
// 建立異步鏈接
//
$con = new AsyncTcpConnection('ws://danmu.demo.live');
$con->transport = 'ssl';
$con->onConnect = function($con) {
// 遞歸調(diào)用connect
connect();
};
$con->onMessage = function($con, $msg) {
echo "recv $msg\n";
};
$con->onClose = function($con) {
echo "con close\n";
};
// 當前鏈接每30秒發(fā)個心跳包
Timer::add(30, function()use($con){
$con->send('ping');
});
$con->connect();
echo $count, " connections complete\n";
}
Worker::runAll();
以下是Events.php中connect的代碼:
// 定時關閉未認證的連接
public static function onConnect($client_id)
{
// 連接到來后,定時30秒關閉這個鏈接,需要40秒內(nèi)發(fā)認證并刪除定時器阻止關閉連接的執(zhí)行
$_SESSION['auth_timer_id'] = Timer::add(40, function($client_id){
Gateway::closeClient($client_id);
}, array($client_id), false);
}
謝謝!
壓力機也要優(yōu)化內(nèi)核,安裝event擴展
你好,@walkor ! 測試機器是2核1g的centos系統(tǒng),我查詢過之前的網(wǎng)站的相似帖子,所以是安裝了event和優(yōu)化過內(nèi)核的。帶寬也排查過。我們發(fā)現(xiàn)壓測的demo會使壓測的服務器php內(nèi)存飆升