onWebSocketConnect、onMessage、onClose三个方法里不执行任何代码全部直接return,每次有长连接建立、关闭,用php start.php status查看,都会发现内存在增加
测试连接脚本
$worker = new Worker();
$worker->onWorkerStart = function($worker){
for( $j = 1; $j<=500; $j++ ){
$con = new AsyncTcpConnection('ws://192.168.3.53:8282/?token=ddd'.$j);
$messageCode = 1003;
// websocket握手成功后
$con->onWebSocketConnect = function(AsyncTcpConnection $con, ) use ( $messageCode, $j ) {
$data = [];
$message = getMsg( $messageCode, $data );
echo $j.PHP_EOL;
};
// 当收到消息时
$con->onMessage = function( AsyncTcpConnection $con, $data ) use ( $messageCode ) {
};
$con ->onError = function( AsyncTcpConnection $con, $code, $msg ){
echo date( 'H:i:s ' ),$msg,PHP_EOL;
};
$con->connect();
}
};
前后两次status显示的占用内存
php start.php status
716169 58.84M none plugin.webman.gateway-worker.game 5 0 3 1321 0 [idle]
php start.php status
703176 58.92M none plugin.webman.gateway-worker.game 5 0 3 9 0 [idle]
每次新增加占用的内存很少,但是一直在缓慢增加,这是什么原因,这感觉跟业务代码没有什么关系
内存有增长不是什么问题,只要不是无限增长就不是内存泄露,php运行过程中可能会申请内存,包括加载php文件,数据包大小变化等,有些内存不会全部还给操作系统,而是留着复用。
不要简单压测看到内存增长就认为有问题,高强度压测24小时看下是否会爆内存,不爆内存就没事,请求数至少过千万甚至上亿看下看内存。
50M也是很正常的内存占用。