我正在运行 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/