workerman/gatewayclient 出现大量 CLOSE_WAIT进程

storm

问题描述

thinkphp5.1 使用workerman/gatewayclient组件,发送消息缓慢,系统出现大量close_wait进程

截图

已经参考优化文档,使用了event组件

截图

122 1 1
1个回答

CLOSE_WAIT是TCP正常的状态,一般不用担心。
如果不想有CLOSE_WAIT,发送数据的时候复用连接发送,不要发送一条就创建一个连接。

另外你这个也不是GatewayWorker,也没看到哪里要用到gatewayClient,也没看见代码用到。

  • storm 2天前

    public function test()
    {
    $data_sock = [
    'data' => [
    'params' => [
    'uid' => 1009,
    ],
    ],
    'req_id' => 1,
    ];
    return $this->send_request($data_sock);
    }

    public function send_request(array $data_sock = [])
    {
        try {
            $fp = stream_socket_client('tcp://0.0.0.0:2346', $errno, $errmsg, 3);
            if ($fp) {
                // 发送数据,Text协议需要在数据末尾加上换行符
                fwrite($fp, json_encode($data_sock) . "\n");
                // 读取推送结果
                $result = fread($fp, 8192);
                if ('ok' == trim($result)) {
                    return true;
                }
            }
            return false;
        } catch (\Exception $exception) {
            return false;
        } finally {
            fclose($fp);
        }
    }
  • storm 2天前

    现在的现象就是发送很慢,需要重启服务

  • walkor 2天前

    改成

    $fp = stream_socket_client('tcp://127.0.0.1:2346', $errno, $errmsg, 3, STREAM_CLIENT_PERSISTENT);

    这样让程序复用连接

  • storm 2天前

    ok 我试试

×
🔝