在onWorkerStart($worker)中啟動(dòng)一個(gè)10S定時(shí)器,該定時(shí)器每次調(diào)用getAllClientCount和getAllClientSessions查詢連接狀態(tài);結(jié)果每次調(diào)用內(nèi)存都在不斷的增長(zhǎng),最后導(dǎo)致內(nèi)存不夠進(jìn)程復(fù)位;執(zhí)行打印結(jié)果參考:
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
這里粘代碼或配置
系統(tǒng):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()
調(diào)用去掉試下
測(cè)試結(jié)果還是一樣的:
echo "\nPrint_Session_Info -----start-----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Gateway::getAllClientCount();
echo "\nPrint_Session_Info -----middle1------使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Gateway::getAllClientCount();
gc_collect_cycles();
echo "\nPrint_Session_Info -----middle1_1----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
$sessino_info = Gateway::getAllClientSessions();
gc_collect_cycles();
echo "\nPrint_Session_Info -----middle2------使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
Gateway::getAllClientSessions();
gc_collect_cycles();
echo "\nPrint_Session_Info -----middle2_1----使用: ".number_format(memory_get_usage()/1024/1024, '2' , $dec_point = '.' , $thousands_sep = '')."Mb\n";
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