Laravel7使用日志内存会一直往上增长最后导致泄漏,求大佬们指教~

(再次感谢各位大佬)问题已解决总结了详细排查过程移步:
blog.csdn.net/eight_eyes/article/d...

编写了一个常驻进程的脚本结果发现内存在不断上涨最后导致溢出,经过排查发现是日志的问题,之后做了一个测试如下:

  • 代码部分:

    Route::get('/aa', function () {
      for ($i = 0; $i < 1000; $i++) {
          Log::info('[INFO]:' . $i);
          Log::error('[ERROR]:' . $i);
          Log::notice('[NOTICE]:' . $i);
          Log::debug('[DEBUG]:' . $i);
          if ($i%100==0) {
              dump(memory_get_usage());
          }
      }
    
      dump(memory_get_usage());
    });
  • 运行结果

    4846848
    5008736
    5118264
    5235984
    5321256
    5422592
    5573080
    5658032
    5742984
    5828256
    5945368

    由结果可以看出内存在不断上涨,想请教大佬们这个如何解决。

另附Xhprof结果:

第一次循环结果

关于使用日志内存会一直往上增长最后导致泄漏的问题,求大佬们指教~

第9次循环结果

关于使用日志内存会一直往上增长最后导致泄漏的问题,求大佬们指教~

不是\Illuminate\Database\Connection::$loggingQueries的问题 这个值默认为false

本着谨慎的原则又测试了7、6、5.8的版本

7 运行结果

18716472
19361856
19443096
19540720
19621960
19686816
19817208
19882064
19947560
20045504
20109752

6运行结果

16602240
18525256
19333920
20197768
20940896
22069800
22681856
23293912
23894808
25817320

5.8运行结果

15944400
16231544
16233376
16235208
16237040
16238872
16240704
16242536
16244368
16246200
16248032
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

@No1Wei 改配置没用,只能卸载或者在 composer.json 中排除掉这个 ServiceProvider 的自动载入

3年前 评论
讨论数量: 11
mengdodo

使用pm2或者uwsgi设置最大内存上限,超限重启.

pm2

apps:
  - name: "Laravel:FeiChang51GroupInviteFriends" # 项目名
    max_memory_restart: 500M #内存达到设定值重启

uwsgi

[uwsgi]
max-requests = 1000 #为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启
3年前 评论
No1Wei (楼主) 3年前
leo

把 facade/ignition 这个包卸载了试试看

3年前 评论

@leo

我把 facade/ignition 配置修改掉了

执行了 artisan vendor:publish –provider=”Facade\Ignition\IgnitionServiceProvider” –tag=”flare-config”

'reporting' => [
        'anonymize_ips' => true,
        'collect_git_information' => false,
        'report_queries' => false,
        'maximum_number_of_collected_queries' => 200,
        'report_query_bindings' => false,
        'report_view_data' => true,
        'grouping_type' => null,
    ],

但是还是不行 :sob:

3年前 评论
leo

@No1Wei 改配置没用,只能卸载或者在 composer.json 中排除掉这个 ServiceProvider 的自动载入

3年前 评论
sreio

github.com/laravel/framework/pull/...

Since this is a breaking change, this PR targets 9x / master. Closes laravel/ideas#2425

3年前 评论

需要自己手动保存一次,刷新缓存吧。

3年前 评论

@leo

执行命令 composer remove --dev facade/ignitio 测试结果 是可以的

之前测试忘记添加--dev了 问题是 \Facade\Ignition\LogRecorder\LogRecorder::$logMessages 这个导致的

同时发现另一个问题函数dump也会让内存上涨

已决定将整个facade/ignitio包移除 ,但不知道有没有比较好的办法... 排除掉这个 ServiceProvider 的自动载入

同时感谢 @ware@振翅飞翔 你们的答案也很棒 :+1:

感谢各位大佬

3年前 评论

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