Apache2-500 内部服务器错误

Apache2-500 内部服务器错误

我正在运行一个 VPS,它使用 Linux CentOs 6,内存为 4 GB,硬盘为 10 GB,还有 2 个虚拟 CPU Intel(R) Xeon(R)CPU L5640 @ 2.27GHz。正如我的主机所说,每个虚拟 CPU 必须至少是 0.5 个物理 CPU。

在一天中的某些时间,当流量较大时,尝试访问我的 php 脚本时我会间歇性地收到“500 内部服务器错误”。

我激活了 apache 的调试级别日志记录,以及使用 E_ALL 的 PHP 日志记录,但是在任何日志中都找不到对错误 500 的引用(我检查了正确的日志!)。

我在路径脚本中没有任何 .htaccess 文件。奇怪的是错误从脚本中的第一个 php 行开始(先前的 html 显示正确,但在第一行 php 脚本发送 500 错误)。

CPU 负载始终良好(最大 0.15 0.08 0.01)并且 RAM 接近 95%,但是一个月内仅交换过 2 次,大小为 2-5 MB。

Apache 使用以下值与 prefork 协同工作:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      280
  MaxClients       280
  MaxRequestsPerChild  4000
</IfModule>

一切工作正常,在安静的时候我没有收到任何错误,但是当流量上升(每小时 6-9000 次访问)时我开始收到错误。

我可以通过增加资源来解决此问题吗?(我可以将 RAM 升级到 16 GB)。

它可以依赖于达到 MaxClients 数(但是 apache 必须将其写入日志,对吗?)?

如果我将 RAM 升级到 6 或 8 GB,我必须用它来计算 MaxClients 值吗?

MaxClients = Total RAM dedicated to the web server / Max child process size

最大子进程大小约为20M。

问题还会出在哪里?

提前致谢

以下是有关错误日志的 php.ini 部分

error_reporting = E_ALL | E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
error_log = /var/log/php_errors.log

未提及的所有内容都会被评论。

答案1

当您在 PHP 中遇到 500 错误时,首先要做的就是检查 PHP 错误日志;如果 apache 没有报告 500 错误,那么它就是由 PHP 引起的。

要检查是否达到资源限制,请启用并监视 apache服务器状态

答案2

问题的原因如下:

Max Requests Per Child: 4000

更改MaxRequestsPerChild 为较小的值,尝试从 70 开始,所有间歇性的 500 内部服务器错误将消失。

相关内容