php - 填充 FosElasticaBundle 时 php 内存不足,可能存在内存泄漏?

标签 php symfony memory-leaks elasticsearch foselasticabundle

我已经安装了 FOSElasticaBundle 并让它处理我的数据的横截面。

我的问题在于我需要使用大约 1400 万行来构建索引。我运行了 populate 命令,昨天大约 6 小时后它出现了 10.8% 的内存错误:

PHP Fatal error:  Allowed memory size of 2147483648 bytes exhausted (tried to allocate 52277 bytes) in /var/www/html/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php on line 111

如您所见,我已将我的 php 内存限制设置为 2G,这应该是过高的。

错误前的最后一行看起来像

Populating index/entity, 10.8% (1315300/12186320), 36 objects/s (RAM : current=2045Mo peak=2047Mo)

从 30mb 左右开始,每条线的电流和峰值都在上升。

我的假设是存在某种内存泄漏?当然 php 的内存不应该被这个过程耗尽。我还尝试了带有一些额外参数的命令

app/console fos:elastica:populate --no-debug --no-reset --env=prod

但当我观察它运行时,当前内存仍在增加。

关于这里可能发生的事情以及我可以做些什么来调试它有什么想法吗?我发现这个讨论听起来像我的问题,但并没有真正提出一个好的解决方案:https://github.com/FriendsOfSymfony/FOSElasticaBundle/issues/82 .我正在使用原则和默认提供程序。

谢谢你-

最佳答案

我无法完全解决内存泄漏问题,但可以通过运行命令来解决

app/console fos:elastica:populate --no-debug --no-reset --env=prod --offset=n

我已经能够批量填充。我通过使用此页面上的解决方案关闭记录器来大幅减少内存泄漏量

https://github.com/FriendsOfSymfony/FOSElasticaBundle/issues/273

将我的 php memory_limit 设置为 4G(!)我能够无错误地填充超过 500 万条记录,因此在几个批处理之后我应该完成这个过程。

大多数解决方案似乎都涉及编写自定义提供程序(请参阅 https://github.com/FriendsOfSymfony/FOSElasticaBundle/issues/457),但通过可笑的 memory_limit 并尽可能地限制内存泄漏,我不需要这样做。

关于php - 填充 FosElasticaBundle 时 php 内存不足,可能存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24451983/

相关文章:

php - 从 iOS 发送多部分 POST 并在 PHP $_POST 中读取参数?

Symfony 4.3 - 无法 Autowiring 引用类 "Symfony\Component\Security\Core\Security"的服务参数

Symfony2 : Radio buttons in a collection

python - 使用 rv_continuous 生成随机变量时如何修复 scipy.stats 中的内存泄漏?

ios - ViewController deinit 后 UIImageView 内存泄漏

javascript - 浏览器中的内存泄漏

javascript - PHP脚本获取数组中的数据库值以在下拉列表中查看

php - 测试 Web 应用程序中的安全漏洞 : Best practices?

PHP foreach 获取表值并更改

javascript - 检查输入表单是否为空 jQuery