businessWorker内存持续增长

 用的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里面的协议解析流程图
sp190207_181653.png

 
已邀请:

rayrola - 90

赞同来自:

花了3天时间,终于搞定了,是汉字转码的问题
因为用了一个Unicode转汉字的一个方法,这里面用的create_function。这就导致每次调用就占了8个byte内存。
$signString = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$signString);
现在把该方法修改为以下就好了
$signString = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
function($matches){
return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");
},
$signString);

要回复问题请先登录注册