(糟糕)nginx + php-fpm 优化(由我们的提供商完成)评论

(糟糕)nginx + php-fpm 优化(由我们的提供商完成)评论

我向我们的托管提供商询问了我们托管服务器上的 nginx + php-fpm 优化。我得到了以下答复:

您好,Nginx 内部没有太多可以优化的地方,因为它是线程化的,不会占用太多资源。我检查了您的 php 配置,发现内存限制为 128M,pm.max_children 为 50。这意味着 PHP 可以在您的 2G 服务器上使用最多 6.5G 的内存。我已将 max_children 减少到 15,这样服务器就不会耗尽内存。您希望我在您的其他服务器上执行此操作吗?

首先,我认为 Nginx 有很多可以优化的地方,例如我读过这篇文章http://www.softwareprojects.com/resources/programming/t-optimizing-nginx-and-php-fpm-for-high-traffic-sites-2081.html并检查是否至少应用了其中一些优化,但基本上没有应用。

此外,我认为还有很多可能的 php-fpm 优化(例如在这篇文章中http://www.if-not-true-then-false.com/2011/nginx-and-php-fpm-configuration-and-optimizing-tips-and-tricks/)同样,基本上没有一个得到应用。

上述文章中提到的优化有用吗?

最后,我认为他们说由于 2GB RAM 和 128MB memory_limit,我最多可以使用 15 个子进程,这种逻辑完全是胡说八道,因为在我们的应用程序中,一个 php-fpm 线程(根据 htop)通常占用大约 30MB。所以在我看来,子进程的最大数量应该根据平均使用量来计算,对吗?此外,如果我在 Web 服务器上只有一个应用程序(数据库位于不同的服务器上,并且此计算机上没有运行其他服务),我可以使用静态数量的 php-fpm 线程,可以吗?

答案1

那个人做对了所有事情,我不明白你为什么说它“不好”。你的性能问题很可能出在你的代码中,而系统管理员无法修复糟糕的代码。你需要分析你的代码,看看瓶颈在哪里。完成这些操作并修复问题后,你可以启用 OPCache 来获得一点额外的性能提升。

关于您链接的文章(顺便说一下,第二个链接已损坏),唯一真正相关的事情是使用 UNIX 套接字而不是 TCP 来与 PHP-FPM 通信;其他一切都不会真正影响 PHP 响应时间(我并不是说它不会影响服务器的整体响应时间,但启用 GZip 并不会神奇地让您的应用程序的数据库查询响应更快)。

系统管理员告诉你的并不是废话。根据你的测量,应用程序可能只使用了 30 MB,但考虑到 PHP 内存限制设置为 128MB,这意味着没有什么可以阻止它使用超过 30MB 的内存,一旦发生这种情况,你的服务器就会开始交换和/或耗尽内存,这是灾难恢复时间,因为用户尖叫着说他们无法连接到你的应用程序。

此外,请发布nginx.confphp-fpm.conf我会用一些新信息更新我的答案。

相关内容