GatewayWorker 压测在3000多的时候就上不去了,报 worker[none:3956] exit with status 9
服务器:2核4G ; centos
这里写问题具体描述
内核已经按照文档优化:
按照https://www.workerman.net/doc/workerman/debug/busy-process.html 追踪:
也并没有什么可疑点
以下是压测代码
<?php
require_once __DIR__ . '/../../vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;
/**
* 连接数压力测试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) {
// 递归调用connect
connect();
};
$con->onMessage = function($con, $msg) {
echo "recv $msg\n";
};
$con->onClose = function($con) {
echo "con close\n";
};
// 当前链接每30秒发个心跳包
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秒内发认证并删除定时器阻止关闭连接的执行
$_SESSION['auth_timer_id'] = Timer::add(40, function($client_id){
Gateway::closeClient($client_id);
}, array($client_id), false);
}
谢谢!
压力机也要优化内核,安装event扩展
你好,@walkor ! 测试机器是2核1g的centos系统,我查询过之前的网站的相似帖子,所以是安装了event和优化过内核的。带宽也排查过。我们发现压测的demo会使压测的服务器php内存飙升
exit with status 9 有可能是客户端进程占用某个资源达到上限被操作系统kill 掉了
建议将压测脚本放到服务器上试下,排除压力机本身哪里资源限制问题
就是内存
试过在服务器本身测试,达到接近4000的样子,内存打满
strace -ttp pid 看下客户端进程是不是某个资源受限了
这个长连接怎么支持这么多并发连接数?web服务器可以用这个吗?可以同时处理3000个用户的请求?
压测服务器的workermanstatus