Gateway Worker进程内存不断上涨

Wakada

使用的GatewayWorker框架,
目前碰到的情况是BusinessWorker进程跑一段时间后,内存一直在上涨,得定期重启BusinessWorker进程,
客户端使用WebSocket长连接,目前客户端在2500左右,基本上7 x 24时在线(硬件),
Worker进程情况如图1:
图片
 
Events没有复杂的逻辑,基本上只是在维持心跳:

class Events
{
    public static function onConnect($client_id)
    {
        //echo $client_id . "\n";
        Gateway::sendToCurrentClient(json_encode());
    }
    public static function onMessage($client_id, $message)
    {
        //file_put_contents('./debug.log', $client_id.':'.$message."\n", FILE_APPEND);
        $recArrData = json_decode($message, true);
        if (json_last_error() === JSON_ERROR_NONE)
        {
                if (isset($recArrData))
                {
                        switch ($recArrData)
                        {
                                case 'pingBack':
                                return Gateway::sendToCurrentClient(json_encode());
                        }
                }
        }
    }
    public static function onClose($client_id)
    {
        self::offlineNotice('http://xxxxxxx/close/'. $client_id);
    }
    public static function offlineNotice($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, 300);
        curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
        curl_exec($ch);
        curl_close($ch);
        unset($ch);
    }
}

请问是什么原因或有木有排查思路?谢谢

3640 5 0
5个回答

keytehu

curl内存泄漏了?
把curl部分代码弄成一个脚本,一直跑看下内存涨不涨

damao

业务如果使用了全局数组,一直向里面塞数据,又不删除内存就会一直涨。

  • Wakada 2019-08-30

    业务逻辑代码贴在上面了,只有一个curl,没有其它的

小白

大佬,找到原因了吗也遇到这个问题。内存只涨不降,访问人数降了内存也不降

  • 小阳光 2020-06-24

    试试 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

小阳光

试试 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

  • 暂无评论
scan_z

根据我遇到的同样问题,个人总结的经验:
1、不要信百度出来的答案
2、不要怀疑是Gatewaywork的问题
3、CURL如果使用了curl_close 也不要怀疑是CURL的问题

最后拼命找了几天,还是逻辑代码的问题,大可能性是使用了某些函数没释放造成的内存泄露。
例如相关问题解决案例:https://wenda.workerman.net/question/3732

我最终解决也是因为排查到了使用了一个create相关函数创建了没释放造成的。

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