businessWorker内存持续增长

rayrola

用的GatewayWorker(3.0.12)Linux Centos服务器PHP 5.6.38.
启动服务器成功后,有300个客户端正常保持长连接,此时占用总内存大约40MB。随着时间的增长,占用总内存逐渐增大,通过status查看时businessWorker占用,运行12小时大约能跑到300M去,为什么会一直增长呢?
在此期间,程序都是正常运行的。


关于程序的写法,都是采用new class,然后调用class里面的方法。每个class里面无static变量。只有const和public。
整个程序用了md5库函数、openssl加密、解密库函数、json库函数。


为什么我这里的内存会逐渐增加呢?现在处理办法是每天重启一次。不过好鸡肋。求赐教
在运行的过程中,无节点断开连接,也无新设备新建连接。一直是开始的300个左右的客户端存在。
 
这是在Events里面的协议解析流程图

 

3090 1 0
1个回答

rayrola

花了3天时间,终于搞定了,是汉字转码的问题
因为用了一个Unicode转汉字的一个方法,这里面用的create_function。这就导致每次调用就占了8个byte内存。

$signString = preg_replace_callback('/\\\\u({4})/i',
        create_function(
            '$matches',
            'return mb_convert_encoding(pack("H*", $matches), "UTF-8", "UCS-2BE");'
        ),
    $signString); 现在把该方法修改为以下就好了
$signString = preg_replace_callback('/\\\\u({4})/i',
    function($matches){
        return mb_convert_encoding(pack("H*", $matches), "UTF-8", "UCS-2BE");
    },
    $signString);
  • 暂无评论
年代过于久远,无法发表回答
🔝