我有一个 Heroku 1X dyno,它在重新启动时立即消耗其所有内存。
这是日志中的重启:
2020-05-18T16:57:54.119229+00:00 app[web.1]: Stopping php-fpm...
2020-05-18T16:57:54.119814+00:00 app[web.1]: Stopping httpd gracefully...
2020-05-18T16:57:54.121897+00:00 app[web.1]: Stopping httpd...
2020-05-18T16:57:54.131154+00:00 app[web.1]: Shutdown complete.
2020-05-18T16:57:54.194178+00:00 heroku[web.1]: Process exited with status 143
2020-05-18T16:57:57.194751+00:00 app[web.1]: Detected 536870912 Bytes of RAM
2020-05-18T16:57:57.231186+00:00 app[web.1]: PHP memory_limit is 4M Bytes
2020-05-18T16:57:57.245920+00:00 app[web.1]: Starting php-fpm with 128 workers...
2020-05-18T16:57:57.386605+00:00 app[web.1]: Starting httpd...
2020-05-18T16:57:58.220510+00:00 heroku[web.1]: State changed from starting to up
Run Code Online (Sandbox Code Playgroud)
我的 procfile 只是:
web: vendor/bin/heroku-php-apache2
Run Code Online (Sandbox Code Playgroud)
我的 .user.ini 是:
memory_limit = 4M
Run Code Online (Sandbox Code Playgroud)
这些代码都没有设置为在后台运行,它只是一个处理请求的 API。然而,它立即消耗了最大内存并抛出了 R14 错误,有 0 个请求进入。https://share.getcloudapp.com/GGukb5QZ
有谁知道会发生什么?
这是您需要阅读的文档:https://devcenter.heroku.com/articles/php-concurrency
\n\n您用评论回答了这个问题“我可以通过增加内存限制来减少内存底限(这样它就不会在启动时占用所有内存)。”
\n\n长话短说,Heroku 说:
\n\n此计算忽略的是运行 HTTP 和其他进程的开销。正如该页面上所澄清的“这些默认值是有意选择的,不留下任何 \xe2\x80\x9cheadroom\xe2\x80\x9d ...因为应用程序极不可能消耗其整个内存限制...这意味着测功机稍微超过了- 默认订阅。”
\n\n通常,如果您将限制设置为 128MB = 4 个工作进程,那么这并不重要:
\n\n但是,您有:
\n\n您需要找到合适的平衡点,例如像您所做的那样设置为 8M = 64 个进程。
\n\n注意:有关开销和 HTTP 进程的陈述是一种简化,仅用于说明目的。
\n\n配置 FPM 总体来说有点噩梦,因为您可以运行多个池,每个池都包含初始工作人员和备用工作人员。https://www.php.net/manual/en/install.fpm.configuration.php
\n\nHeroku 正在尝试为您简化这个过程。
\n| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |