我有一个Nginx + PHP5-FPM服务器,几乎没有高流量网站.
根据我对PHP5-FPM池配置的理解,我理解:
static =可用于立即创建N个子进程,因此它们不需要打开/重新打开,它们已经打开并且可以在需要时使用,否则它们正在"休眠".
dynamic =可用于打开有限数量的子进程,然后在达到限制时重新生成(最小/最大服务器数).
ondemand =我指定要创建的子进程的最大数量,然后在需要时按需创建子进程,在不再需要时关闭子进程,保持较低的内存使用率,但增加几毫秒的响应时间.
从我在高流量WordPress网站上的测试中,我注意到:
如果我使用"静态",网站肯定会更快,并且可以立即处理大量并发连接,但内存总是增加其使用量,并且在N小时后它似乎几乎使用可用的总RAM.所以我必须定期(每1小时)使用一个cronjob重新加载PHP5-FPM并重新加载/etc/init.d/php5-fpm.
如果我使用"动态"它使用较少的RAM,但在N个并发连接之后会出现频繁的502错误(但可能我配置得不好).
如果我使用"ondemand"这个网站有点慢(比如+ 50/100ms的响应时间),但它可以处理所有高流量但不占用太多RAM.
所以我个人的结论是"ondemand"真的是在低/受控内存使用方面使用的最佳方法,唯一的缺点是响应时间+50/100 ms,但在我的情况下它不是一个大问题.
我的假设是否正确?
小智 6
你没有提到为什么你想要保持低记忆.假设这台机器专门用于服务PHP-FPM,保持低内存无论如何都无助于您的应用程序.你有记忆,使用它.
因此,在这种情况下,"static"是最佳选择,max_requests设置为可以控制内存泄漏(如果有的话).
如果此机器与其他任务共享,则保持低内存是理想的.在这种情况下,"动态"是速度和内存使用之间的最佳折衷.
"ondemand"是一个很好的选择,只有当PHP-FPM引擎不经常使用并且机器的主要目的是其他东西时.
小智 5
您可以将 PHP-FPM 配置为通过检测子进程是否在确定的时间段内终止来自动重新启动。
在全局配置“php-fpm.conf”中,您可以设置如果 1 分钟内有 5 个子进程死亡,则重新启动 PHP-FPM,并在此之前等待 10 秒。
// php-fpm.conf
emergency_restart_threshold = 5
emergency_restart_interval = 1m
process_control_timeout = 10s
Run Code Online (Sandbox Code Playgroud)
所以你可以继续使用“动态”而不使用 cron。
| 归档时间: |
|
| 查看次数: |
13500 次 |
| 最近记录: |