我有一台物理 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”指令以隐藏此消息
它是服务器上安装的唯一网站。
- 当时负载最高时制作的性能图表:
答案1
除非您可以提高性能(并且您的代码可能效率低下),否则您将不得不投入硬件。
任何时候系统资源都不会接近上限。CPU 最多只能达到 25%。
通常,对于事务型数据库,CPU 是最小的问题。检查您的 IO 负载 - 可能是您没有足够的 IO 容量供数据库处理。CPU 只是三个关键资源之一,另外两个是 IO 和内存。
答案2
您已达到服务器MaxRequestWorkers
限制。这意味着当您有大量请求时,其中大多数请求都在等待处理,而在此等待期间 PHP 会超时。
由于您仍拥有大量资源,因此您可以放心地增加MaxRequestWorkers
。另请检查 PHP 的超时设置。