专用服务器在 80 req/s 时停滞 - 是 MaxRequestWorkers 造成的吗?

专用服务器在 80 req/s 时停滞 - 是 MaxRequestWorkers 造成的吗?

我有一台物理 Ubuntu 服务器(点击此处查看部分规格),安装了 Apache 2.4.7、PHP 5.5.9、mysql 14.14、mysqlite 和 Yii 框架 1.16。服务器一开始表现惊人,但突然间,当压力足够大时,它开始超时(每秒 80+ 个请求)。系统资源从未接近上限。CPU 最多只能达到 25%。

在 Apache 错误日志中我发现以下内容:

server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

我是否应该按照它所说的那样增加这个数字,还是只修复此处问题的副作用?

此外,我并不完全理解该文档。在有关 MaxRequestWorkers 的部分中它也将它们联系在一起使用 ServerLimit 设置,但我不太清楚应该将这两者设置为何值才能正常协同工作。

其他可能有用的技术细节:

  • 我已经禁用.htaccess 文件,而是通过 apache 配置来配置 mod_rewrite。
  • Apache 还给出了以下警告,不确定它是否重要:

    apache2:无法使用 127.0.1.1 可靠地确定服务器的完全限定域名。全局设置“ServerName”指令以隐藏此消息

  • 它是服务器上安装的唯一网站。

  • 当时负载最高时制作的性能图表:

IO 和网络性能 其他统计数据

答案1

除非您可以提高性能(并且您的代码可能效率低下),否则您将不得不投入硬件。

任何时候系统资源都不会接近上限。CPU 最多只能达到 25%。

通常,对于事务型数据库,CPU 是最小的问题。检查您的 IO 负载 - 可能是您没有足够的 IO 容量供数据库处理。CPU 只是三个关键资源之一,另外两个是 IO 和内存。

答案2

您已达到服务器MaxRequestWorkers限制。这意味着当您有大量请求时,其中大多数请求都在等待处理,而在此等待期间 PHP 会超时。

由于您仍拥有大量资源,因此您可以放心地增加MaxRequestWorkers。另请检查 PHP 的超时设置。

相关内容