GatewayWorker 压测并发卡在3000

kenxu

问题描述

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);
    }

谢谢!

1022 4 0
4个回答

kenxu

截图

  • 暂无评论
kenxu

截图

  • 暂无评论
walkor

压力机也要优化内核,安装event扩展

  • kenxu 2023-03-17

    你好,@walkor ! 测试机器是2核1g的centos系统,我查询过之前的网站的相似帖子,所以是安装了event和优化过内核的。带宽也排查过。我们发现压测的demo会使压测的服务器php内存飙升

  • walkor 2023-03-17

    exit with status 9 有可能是客户端进程占用某个资源达到上限被操作系统kill 掉了

  • walkor 2023-03-17

    建议将压测脚本放到服务器上试下,排除压力机本身哪里资源限制问题

  • kenxu 2023-03-17

    就是内存

  • kenxu 2023-03-17

    试过在服务器本身测试,达到接近4000的样子,内存打满

  • walkor 2023-03-17

    strace -ttp pid 看下客户端进程是不是某个资源受限了

  • happy321 2023-03-20

    这个长连接怎么支持这么多并发连接数?web服务器可以用这个吗?可以同时处理3000个用户的请求?

kenxu

压测服务器的workermanstatus 截图

  • 暂无评论
年代过于久远,无法发表回答
🔝