【发布时间】:2015-06-06 21:06:38
【问题描述】:
我有一个在 Apache 服务器上运行的基于 PHP 的 Web 应用程序,它在后端有大量的 php 处理。由于整体性能较低,我致力于提高应用程序的性能。首先,我采用了诸如客户端缓存、gzip 启用、js-css 缩小等技术,这些技术将性能提高到一个很好的扩展。
为了进一步提高性能,我想尝试一下服务器级别的改进。所以我尝试通过将应用程序托管在 Apache 和 Nginx 服务器上来比较应用程序的性能。
- Nginx 版本 - 1.0.15;
- Apache 版本 - 2.2.15;
- php版本-5.4.38;
在 Apache 中,我使用 Apache + mod-php,在 Nginx 中,我使用 Nginx + php-fpm 进行比较。正如大多数教程所解释的那样,我将 Nginx 工作人员的数量配置为等于处理器中的内核数量。我使用 jmeter 进行压力测试,以下是我可以从中生成的图表。
在所有这些图表中,x 轴是我发送的每个请求,y 轴是获取每个请求的响应的毫秒数。
访问登录页面
提交登录页面
访问主页
我只能在 1 秒内执行最多 100 个并发用户登录的测试,因为它在这之后在两个服务器设置中都开始丢弃请求。
与 Apache 相比,Nginx 的性能略有提升,但在我的所有服务器架构从 Apache 更改为 Nginx 的情况下,这并没有太大区别。当我观察服务器资源利用率时,我也没有发现 Nginx 和 Apache 之间有太大区别
当我进行其他人的比较时,我发现他们声称 Nginx 在并发访问方面要快得多,如下图所示。
http://www.eschrade.com/wp-content/uploads/2014/01/event-mpm-nginx.gif
但即使在 1 秒内有 100 个并发访问,我也无法观察到 Nginx 与 Apache 的任何主要性能差异。
以下是我的问题。
- 由于内存和其他资源的有效利用,Nginx + php-fpm 是否应该比 Apache + mod-php 更快地执行服务器操作?
- Nginx 是否只推荐用于服务器静态竞争而不推荐用于重型服务器操作站点?
- 有没有更好的方法来配置 Nginx 以获得更多的性能提升?
【问题讨论】:
-
1.实际上可能恰恰相反,因为没有进程间通信。除此之外 - 为什么 php 本身应该运行得更快?是同一版本的同一引擎。
-
2. php-fpm 与提供 static 内容有什么关系?
-
我赞成这个问题,因为它写得很好并且呈现得很好。不过,我投票决定关闭它,因为 (1) 和 (2) 主要是基于意见的,而配置/性能优化问题 (3) 对于有用的答案来说有点过于宽泛。
-
@zerkms 是的,它是相同的 php 版本,但 php-fpm 假设要快得多,因为它使用了使用更少内存的 FastCGI 进程机制。这就是我在互联网上可以找到的。 quora.com/…blog.a2o.si/2009/06/24/apache-mod_php-compared-to-nginx-php-fpm
-
"但是 php-fpm 假设要快得多,因为它使用的是 FastCGI" --- fastcgi 只是一个 SAPI,它不会使 php 本身更快或更慢。但是 fastcgi 的存在使请求传输变慢 - 因为您需要连接和传输请求,而
mod_php它位于同一进程内存空间中。
标签: php performance apache nginx stress-testing