Laravel6.x 中Artisan 命令行中循环调用Artisan::call(),出现内存溢出

1. 环境信息 Laravel6.x,php7.2,centos7

2. Laravel6.x 中Artisan 命令行中循环调用Artisan::call(),出现内存溢出,请问如何解决?

    public function handle()
    {
        for ($circularId = 0; $circularId < 1000; $circularId++){
            Log::channel('cron-daily-info')->info('----- ' . memory_get_usage());
            Log::channel('cron-daily-info')->info('autoSave:circularCompleted {circularId = ' . $circularId . '}');
            \Artisan::call("circular:storeS3", ['id' => $circularId]);
            Log::channel('cron-daily-info')->info('===== ' . memory_get_usage());
        }

    }

得到的结果

1    development.INFO: ----- 28738280  
2    development.INFO: ===== 28852216  
3    development.INFO: ----- 28852688  
4    development.INFO: ===== 28853864  
5    development.INFO: ----- 28854928  
6    development.INFO: ===== 28856040  
7    development.INFO: ----- 28856256  
8    development.INFO: ===== 28857448  
9    development.INFO: ----- 28859072  
10    development.INFO: ===== 28860328  
11    development.INFO: ----- 28860480  
12    development.INFO: ===== 28861656  
13    development.INFO: ----- 28862080  
14    development.INFO: ===== 28863192  
15    development.INFO: ----- 28863408  
16    development.INFO: ===== 28864600  
17    development.INFO: ----- 28870576  
18    development.INFO: ===== 28871832  
19    development.INFO: ----- 28871984  
20    development.INFO: ===== 28873160  
21    development.INFO: ----- 28873584  
22    development.INFO: ===== 28874696  
23    development.INFO: ----- 28874912  
24    development.INFO: ===== 28876104  
25    development.INFO: ----- 28876512  
26    //这里有一段调用接口,存取文件的操作
27    development.INFO: ===== 41062856  
28    development.INFO: ----- 41063280  
29    development.INFO: ===== 41064376  
30    development.INFO: ----- 41065184  
31    development.INFO: ===== 41070472  
32    development.INFO: ----- 41070896  
33    development.INFO: ===== 41072024  
34    development.INFO: ----- 41072240  
35    development.INFO: ===== 41073448  
36    development.INFO: ----- 41073792  
37    development.INFO: ===== 41075064  

在正式环境上已经设置了2048M,但是还会有溢出的情况。

   ini_set('memory_limit','2048M');

3. 如何在循环调用artisan时,销毁单个artisan的内存,不会产生内存溢出?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11

gc_collect_cycles

1年前 评论
Partrick (楼主) 1年前
JerryBool 1年前
Partrick (楼主) 1年前
JerryBool 1年前
guanguans 1年前

内存溢出一般都是静态变量之类的,检查一下被 call 的命令呗,然后执行完命令把不需要的变量释放掉

1年前 评论
Partrick (楼主) 1年前

不一定是框架的问题,你写一个简单的test命令代码来回调看下,里面不做什么操作,先排除这个可能先

1年前 评论
Partrick (楼主) 1年前

可以考虑用new Process('your command')解决内存泄漏也不怕

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!