【问题标题】:PHP-FPM improve performancePHP-FPM 提升性能
【发布时间】:2019-12-14 12:36:31
【问题描述】:

PHP 7.2 + NGINX

你好。我有一个问题——如何通过调整设置来提高 php-fpm 的性能。 机器 CPU 8c/16t,内存 64GB。

当前设置:
下午动态
max_children 64
最大请求 0
tcp套接字

我经常在达到 max_children 设置时遇到问题,然后会发生 100% 的 CPU 负载。我的内存没有问题,总是使用大约 22GB 内存(不仅是 PHP,还有其他一些东西)。我一直在日志中看到考虑设置更高的子池,但是当我已经 100% 的 CPU 负载和 64 个子池时是否有意义?我只找到了如何根据内存限制计算最大子池的方法,但是 CPU 呢?

ps。我有一个 HTTP 缓存服务器,我可以通过改进缓存规则来减少负载,但我只想知道是否有比我目前更好的设置。

【问题讨论】:

    标签: php nginx


    【解决方案1】:

    当我已经有 64 个孩子的 CPU 负载达到 100% 时是否有意义

    是的,确实如此。如果您的 RAM 确实允许更多的工作进程,那么一定要增加它们。这将减少不必要的进程分叉(从而减少 CPU 使用)。

    最大请求 0

    这有点危险,因为它暗示第三方库中没有内存泄漏(可以)。更安全的是将其设置为例如10000 在 10k 个请求后回收工作进程。

    一般来说,除了调整 pm.max_childrenpm.max_requestspm 类型之外,您无法优化 PHP-FPM。

    如果你可以使用staticpm,那么 PHP-FPM 将分配已知数量的工作进程,并且根本没有分叉。这是配置 PHP-FPM 的最佳方式,尤其是例如如果你有一个专门用于 PHP-FPM 的服务器(这需要大量的试验来获得max_children 的理想值)。

    PHP OPCache 是您可以大大改进的地方。确保它已启用。 然后使用cachetool 监视您是否为其分配了足够的内存。

    OPCache 的一个很好的设置是禁用validate_timestamps,因此它永远不会重新检查 PHP 文件的更改。为什么它好,是因为您的脚本将在“已解析”状态和“来自”内存中运行。因此,它们不会因解析它们而导致磁盘读取缓慢或 CPU 影响,并且运行起来更接近二进制程序的运行方式。

    禁用时间戳验证意味着您在部署策略中使用了清除 OPCache。同样,cachetool 在这里很有帮助(cachetool opcache:reset 在 git 挂钩中,如果 git 是您用于部署的工具)。

    最后,你真的需要在使用这样的 CPU 的同时调整 PHP-FPM 吗?可能不是。这种 CPU 使用保证配置缓存,例如Varnish 或 NGINX Fastcgi 缓存,或者至少是 NGINX 微缓存。

    【讨论】:

    • 感谢您的回答。我相信 opcache 的设置应该没问题? opcache.revalidate_freq=0 opcache.validate_timestamps=0 opcache.max_accelerated_files={取决于php文件数,但高于它} opcache.memory_consumption=192 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
    • 它们看起来不错,但话又说回来,cachetool 可能会告诉您 192MB 是否足够。对于某些框架(例如 Magento 2),这可能根本不够……
    • 目前,我使用 256mb 作为 memory_consumption - 这是 Symfony 文档中的专用值以获得更好的性能,但我也会检查该工具。感谢您的帮助,最好的问候。
    • 如果您出于某种原因仍不想使用 cachetool,您可以通过放置脚本并转储 opcache_get_status 的输出来检查 OPCache 的内存消耗。确保通过 Web 调用它,而不是 CLI(因为 OPCache 默认在 Web 上下文中工作)。然后检查输出中的free_memoryopcache_hit_rate。缓存命中率必须>99%,否则通常意味着缓存刚刚被清除或内存不足。
    • 非常感谢另一个提示!我只需要尽快在生产中改进这些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多