php - 高 HTTP API 调用时 Apache 服务器变慢

标签 php linux apache http centos

我正在运行 HTTP API,每分钟同时调用超过 30,000 次。
目前我每分钟可以调用 1,200 次。如果我每分钟调用 1200 次,所有请求都已完成并立即得到响应。
但是如果我每分钟同时调用 12,000 次,则需要 10 分钟才能完成所有请求。在那 10 分钟内,我无法浏览服务器上的任何网页。很慢

我正在运行 CentOS 7

服务器规范

英特尔® 至强® E5-1650 v3 六核 Haswell,
内存 256 GB DDR4 ECC 内存,
硬盘 2 x 480 GB SSD(软件-RAID 1),
连接 1 Gbit/s

API - 响应时间戳的简单 php 脚本

echo time();

查看top命令,服务器没有负载

请帮帮我

谢谢

最佳答案

听起来像是拥塞问题。 无论您的脚本/页面处理速度有多快,如果下一个请求在上一个请求的执行时间内完成:

它将使用资源(cpu、内存、磁盘、网络流量和连接)。 并让与之平行的一切变慢。

您可以做很多事情,但您需要弄清楚您的设置的确切问题是什么,并确定该措施是否产生了预期的结果。

如果核心问题是资源被并行进程占用,您可以降低连接限制,以便更多连接进入等待模式,这可以让更多资源可用于实际分发页面,而不是让一切变得更加拥挤。 看看这个: http://oxpedia.org/wiki/index.php?title=Tune_apache2_for_more_concurrent_connections

如果服务器接受连接的速度比它能处理它们的速度快,那么无论您如何更改,都会遇到问题。它应该在某个时候开始断开连接。如果你将法式长棍面包塞进它的喉咙的速度比它能张开嘴的速度快,无论哪种方式它都会窒息。

如果系统在网络方面不堪重负(传输速度限制、操作系统的最大可能并发连接等),那么您应该考虑使用负载均衡器。只有在负载均衡器确认服务器有能力实际处理页面请求后,它才会进一步发送给用户。 当您执行任何会减慢页面加载速度的处理(服务器端代码执行、大量数据等)时,这通常很有效。

优化性能 有很多方法可以在网络服务器上执行 PHP 代码,我假设您使用的是 Appache。我不是专家,但是有一些模式,例如 CGI 和 FastCGI。从而可以大大提高执行速度。调整与这些相关的设置也可以向您展示正在发生的事情。例如,您可能使用少量 PHP 威胁来处理该数量的并发连接。

例如,看看这样的东西 http://blog.layershift.com/which-php-mode-apache-vs-cgi-vs-fastcgi/

这里没有“最适合所有人”的解决方案。要修复它,您需要弄清楚服务器的瓶颈是什么。并采取相应的行动。

每分钟 12000 次调用 == 每秒 200 次调用。

您可以将您的测试用例限制为这 200 个中的多个,并在更改设置时增加/减少它。您的目标是在尽可能短的时间内发出那么多的请求,从而确保永远不会发生拥塞。

也就是说:后果。

当您打算实现更改以优化您想要达到的最大页面加载数时,您会无意中引入其他条件。例如,如果 Apache 的最大内存使用量成为问题,则提高该限制将确保更好的性能,但会增加操作系统内存不足的可能性,因为其他进程也想申请更多内存。

添加负载均衡器会增加另一层可能的故障和可能的减速。是的,您可以防止拥堵,但是重新路由导致的减速是否值得?

提高性能会增加系统的负载,从而有可能接受更多的并发连接。因此,沿线的某个地方会出现一个不同的瓶颈。不同进程上的高流量总是会以所述进程崩溃而告终。 Apache 是一个构建良好的 Web 服务器,因此理论上它应该可以保护您免受上述问题的影响,但是错误地调整设置仍然可能导致崩溃。

因此,在实际使用之前,请谨慎试验并进行测试。

关于php - 高 HTTP API 调用时 Apache 服务器变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118474/

相关文章:

php - 我应该在 Controller 的构造函数中注入(inject)存储库类还是模型类?

php - 我正在尝试刷新 PHP 变量

android - 来自 android 命令行的 GNURoot 或开机自动启动

linux - nasm 程序集 sys_execve/bin/sh

apache - Apache 配置文件 : 中的 XAMPP PORT 80 是 Busy/EasyPHP 错误

php - 不能在输出缓冲显示处理程序中使用输出缓冲

php - pdo 类 vs pdostatment 类 - 初学者

php - 如何使用 opentbs 在 docx 中插入条件空格(仅当某些字段不为空时)

linux - 使用非 gcc 编译 linux 内核

apache - php.ini 与 .htaccess 中的 suPHP