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的内存,不会产生内存溢出?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

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

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

gc_collect_cycles

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

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

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

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

1年前 评论

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