在onWorkerStart($worker)中启动一个10S定时器,该定时器每次调用getAllClientCount和getAllClientSessions查询连接状态;结果每次调用内存都在不断的增长,最后导致内存不够进程复位;执行打印结果参考:
Print_Session_Info -----start-----使用: 8.66Mb
Print_Session_Info -----middle1------使用: 8.69Mb
Print_Session_Info -----middle1_1----使用: 8.71Mb
Print_Session_Info -----middle2------使用: 8.74Mb
Print_Session_Info -----middle2_1----使用: 8.76Mb
这里粘代码或配置
系统:Alibaba Cloud (Aliyun ) 2.1903 LTS (Hunting Beagle) x86_64(Py3.7.9)
Workerman version:4.0.40 PHP version:7.4.30
public static function onWorkerStart($worker)
{
Timer::add(10, function () {
Events::Print_Session_Info(1);
});
}
public static function Print_Session_Info($flag)
{
echo "\nPrint_Session_Info -----start-----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Util::logger(Util::LOG_INFO,Util::DEV_GATEWAY_LP,"\n");
Util::logger(Util::LOG_INFO,Util::DEV_GATEWAY_LP,">>>>>>>getAllClientCount: ".print_r(Gateway::getAllClientCount(),true));
echo "\nPrint_Session_Info -----middle1------使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Gateway::getAllClientCount();
echo "\nPrint_Session_Info -----middle1_1----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
$sessino_info = Gateway::getAllClientSessions();
echo "\nPrint_Session_Info -----middle2------使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Gateway::getAllClientSessions();
echo "\nPrint_Session_Info -----middle2_1----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
}
把
Print_Session_Info
方法里的Util::logger()
调用去掉试下测试结果还是一样的:
Print_Session_Info -----start-----使用: 3.59Mb
Print_Session_Info -----middle1------使用: 3.61Mb
Print_Session_Info -----middle1_1----使用: 3.64Mb
Print_Session_Info -----middle2------使用: 3.67Mb
Print_Session_Info -----middle2_1----使用: 3.69Mb
我这测试没问题
会不会是PHP版本的问题
同样的代码,我在我另外一台windows服务器上是正常的