【问题标题】:Laravel Queue Worker Memory Footprint is Too Big :/Laravel Queue Worker 内存占用太大:/
【发布时间】: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 内存?
  • 你在使用 ORM 吗?
  • 好老htop :D

标签: php laravel memory lumen memory-footprint


【解决方案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。所以我不确定从中推断出什么。
猜你喜欢
  • 2020-09-09
  • 2017-02-19
  • 1970-01-01
  • 2015-10-14
  • 2013-07-18
  • 2013-07-11
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多