webman插件Getwayworker进程busy

webman新友

问题描述

阿里云机器8h16g服务器 只运行了getway和注册中心 服务器已经进行linux内核优化并安装了event扩展
使用SuperVisord启动
截图

worker进程运行在阿里云ACK Serverless集群中 镜像用的https://github.com/Tinywan/docker-php-webman
截图

另一台内网阿里云服务器同样进行内核优化过 使用workerman进行压测
截图
查看gateway状态 有两个进程busy状态
截图
运行strace -ttp 19969
截图
运行lsof -nPp 19969
截图

第一次使用getwayworker 麻烦大佬们帮忙看下这个问题是啥原因

420 5 1
5个回答

webman新友

workerman压测调至1000连接 反复测试gateway没有busy 大佬们我这该如何调优

gateway机器下的信息
php扩展
截图
查看系统级别能够打开的文件句柄的数量: cat /proc/sys/fs/file-max
截图
内核优化设置
截图

  • 暂无评论
webman新友

后续补充 直接终端启用后正常 用SuperVisord启动出现这个问题

  • six 2024-04-20

    SuperVisord启动时内核优化 Soft open files 没生效

  • ieras 2024-08-18

    在supervisor 使用root启动,然后用su -c 命令切换别的用户运行即可解决你这个问题,例如我这样启动
    su -s /bin/bash www -c "cd /www/wwwroot/im && /www/server/php/74/bin/php think worker:gateway restart"

    我的配置

    • hard nofile 1024000
      root soft nofile 1024000
      root hard nofile 1024000
      www soft nofile 1024000
      www hard nofile 1024000
      其他优化根据你上面的就可以
ieras

截图
我2核2G阿里轻量云压测2万保持连接

  • 暂无评论
ieras

截图

  • 暂无评论
ieras

压测脚本。

<?php
ini_set('memory_limit', '512M');
require_once __DIR__ . '/../../vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
$worker->onWorkerStart = 'connect';
function connect()
{
    static $count = 0;
    // 20000个链接
    if ($count++ >= 20000) return;
    // 建立异步链接
    $con = new AsyncTcpConnection('ws://127.0.0.1:8282');
    $con->onConnect = function ($con) {
        connect(); // 递归调用connect
        usleep(50000);
    };
    $con->onMessage = function ($con, $msg) {
        echo "$msg|";
    };
    $con->onClose = function ($con) {
        echo "c-";
    };
    Timer::add(50, function () use ($con) {// 当前链接每50秒发个心跳包
        $con->send('{"type":"ping"}');
    });
    $con->connect();
    echo $count . "+";//echo $count, " connections complete\n";
}
Worker::runAll();
  • 暂无评论
×
🔝