为什么我的 Apache 网络服务器上的进程不断增加?

为什么我的 Apache 网络服务器上的进程不断增加?

我正在运行 apache 2 web 服务器。一切运行正常,但大约每 14-20 天我必须重新启动 web 服务器,因为它不再响应。

看看穆宁统计信息,我认识到,这与 Apache 进程的数量有关。它们不断增加,直到达到 150。然后 Apache 没有响应。

我该如何防止 Apache “冻结”?

统计数据的截图如下:

增加 Apache 2 Web 服务器中的进程

细节:

  • Apache 在 Debian 5.0 根服务器上运行。
  • 使用 ISPConfig 进行管理
  • 我托管了大约 30 个网站
  • 每天 1000 次页面展示量(所有网站的总和)
  • 其中大多数是 Drupal 安装
  • 一次安装 Piwik 即可适用于所有网站
  • 一些自定义 PHP 应用程序

日志和状态消息:

扩展的 Apache 状态显示以下 45 行中的 30 行(将真实主机名替换为SERVERNAME):

22-5    -   0/0/75  .   0.00    1813    0   0.0 0.00    1.17    ::1 SERVERNAME  OPTIONS * HTTP/1.0

一些 Apache 设置(默认设置):

  • prefork 模块已启用
  • MaxKeepAliveRequests = 100
  • 超时 = 300
  • KeepAlive = 开启
  • KeepAliveTimeout = 15
  • 最大客户端数 = 150
  • 每个子项的最大请求数 = 0
  • 启动服务器 = 5
  • 最小备用服务器 = 5
  • 最大备用服务器数 = 10
  • 最大客户端数 =150
  • 每个子项的最大请求数 = 0

答案1

这看起来好像您有一些永不终止的请求,迫使 Apache 生成新进程,直到达到配置的最大值。此后,Apache 没有选项为新请求创建新进程,并且似乎已停止运行。

通过您提供的少量数据,我们不可能判断造成这种情况的原因。

您在日志文件中看到任何提示了吗?您向客户提供什么类型的页面?静态 HTML、PHP、CGI 还是其他?在什么操作系统上?

答案2

您当然不应该看到这种行为——这意味着您的系统出现了严重问题。

您的设置是什么:

Timeout
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
MaxRequestsPerChild
ServerLimit
MaxClients

这是预分叉还是线程化的 Apache?

然而,问题更有可能出现在其他地方。Apache 是否使用任何脚本/应用引擎?如果是,是什么?它是如何配置的?

相关内容