Laravel Queue Worker 内存占用太大:/

Posted

技术标签:

【中文标题】Laravel Queue Worker 内存占用太大:/【英文标题】:Laravel Queue Worker Memory Footprint is Too Big :/ 【发布时间】:2018-03-23 18:09:28 【问题描述】:

我正在运行一个连接到六个 MQ 的队列工作程序。启动时,它会消耗 25MB 的 RAM。那就是队列上的作业为零,即工作人员处于睡眠状态。我在所有项目中都使用了 Larvel,这个特定的项目纯粹是为队列工作者构建的(即没有 Web 访问权限的微服务)。

我想减少内存占用,但更重要的是我想知道内存在哪里被消耗。我正在使用 php 7.1,所以现在 xhprof 不再配置内存,我必须找出替代方案。

我知道 Lumen 是为了消耗更少的内存,至少 Lumen 似乎是 Laravel 的一个子集。是否可以“关闭”我的 Laravel 应用程序的某些部分以模仿 Lumen?我尝试从 config/app.php $providers 数组中注释掉行,但内存消耗似乎没有太大差异(根据我的测量约为 1MB)。

tl;博士;如何“调整” Laravel 内存占用?如何将 Laravel 变成 Lumen?

谢谢

编辑:图片或它没有发生。 AFAIK RES 列以千字节为单位,因此内存约为 39MB。

【问题讨论】:

只有单个工作进程使用 25MB? 那很奇怪..你实际上用 laravel 做什么..?和 php 最大内存设置.. 你是如何断定是 laravel 吞噬了 25 MB 内存? 这可能会有所帮助***.com/questions/33811475/… 你在使用 ORM 吗? 好老htop :D 【参考方案1】:

您是否检查了您的 php.ini 并关闭了您的工作人员和其他代码库不需要的任何扩展。

你可以为这个worker创建一个自定义的php.ini,并通过命令行参数提供它

php -c queue_php.ini 工匠队列:工作。

不要忘记您看到的所有 PHP 执行的内存占用,包括 JIT 编译器和加载的任何扩展以及它们加载的任何内容。

【讨论】:

这听起来很有趣——有没有一种简单的方法可以找到项目的 php 依赖项? IDE 会有帮助吗? 另外,我的 laravel 项目的 apache php 分支通常会使用约 4MB 的内存。这是否还包括 JIT 编译器 + 扩展?谢谢 @mils 我不确定有几个原因,主要原因取决于 apache 中的 PHP 设置(使用的连接器)。【参考方案2】:

这可能有助于减少队列中使用的内存。

网址:Laravel queues - Resource Considerations

资源注意事项

守护进程队列工作人员在处理每个作业之前不会“重新启动”框架。因此,您应该在每个作业完成后释放所有繁重的资源。例如,如果您正在使用 GD 库进行图像处理,您应该在完成后使用imagedestroy 释放内存。

【讨论】:

谢谢,关于非托管资源是有道理的,但我认为我没有任何(即除了 laravel 日志文件之外没有文件句柄,没有 GD 工作)。但是,它发出了 很多 的 guzzle 调用,在引擎盖下它们是 curl 调用,因此可能会或可能不会产生影响。另一件事是工作守护程序以 35MB RAM 开始,经过 2 天的繁重操作后,它仍然是 35MB RAM。所以我不确定从中推断出什么。

以上是关于Laravel Queue Worker 内存占用太大:/的主要内容,如果未能解决你的问题,请参考以下文章

为 Amazon Beanstalk 上的 Laravel Queue Worker 提供环境变量

Laravel Queue Worker、RabbitMQ 和远程生成的运行作业

Laravel queue worker can't process jobs # 错误日志 local.ERROR: Class does not exist "exception&quo

Laravel 5.5 Worker 内存问题

ASP.Net Worker 进程内存配置文件工具

rabbitmq集群跨机器访问引起内存占用高的问题