 
在论坛上看到有小伙伴说有内存泄漏,我试了一下确实是有内存泄漏的情况,而且裸用 think-swoole 也是有内存泄漏的,所以本文就给大家分享一下如果裸用think-swoole出现内存泄漏怎么办?
解决方法:可以使用 Swoole 提供的max_request配置项临时解决一下内存泄漏
		
	
这个配置项的作用是当一个 worker 进程在处理完超过此数值的任务后将自动退出,进程退出后会释放所有内存和资源
		
	
配置项本来直接写在config/swoole.php中的server.options就可以了
		
	
我配置了一下这个参数之后,测试进程并没有重启,于是去看了一下 think-swoole 源码,发现底层直接写死为了 0
		
	
src/concerns/InteractsWithServer.php
public function run(): void
{
    $this->getServer()->set([
        'task_enable_coroutine' => true,
        'send_yield'            => true,
        'reload_async'          => true,
        'enable_coroutine'      => true,
        'max_request'           => 0,
        'task_max_request'      => 0,
    ]);
    $this->initialize();
    $this->triggerEvent('init');
    //热更新
    if ($this->getConfig('hot_update.enable', false)) {
        $this->addHotUpdateProcess();
    }
    $this->getServer()->start();
}
		询问了一下 ThinkPHP 开发组成员,得到的结果是:
设计就是这样的,希望这几个配置项固定成这样,所以写死了。同时防止 RPC 传文件时分多次上传,如果设置了就可能会出现传到一半的时候被重置了
同时给到了一个解决方法,就是通过事件去修改,即
$this->triggerEvent('init');
				
			
		
		所以先来创建一个事件
			
		
php think make:listener SwooleInit
修改为以下内容
			
		
<?php
declare(strict_types=1);
namespace app\listener;
use think\swoole\Manager;
class SwooleInit
{
   public function handle(Manager $manager)
   {
       $manager->getServer()->set(['max_request' => 10]);
       // 或者使用下面这个
       // app('think\swoole\Manager')->getServer()->set(['max_request' => 10]);
   }
}
		
		修改配置文件app\event.php
			
		
'listen' => [ 'swoole.init' => [\app\listener\SwooleInit::class], ],
然后启动进行测试,就会发现修改成功了
以上就是“裸用think-swoole出现内存泄漏怎么办?”的详细内容,想要了解更多关于swoole教程欢迎关注编程学习网扫码二维码 获取免费视频学习资料

- 本文固定链接: http://phpxs.com/post/8427/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
					查 看2022高级编程视频教程免费获取
				
			 
			








