我正在运行 apache 2 web 服务器。一切运行正常,但大约每 14-20 天我必须重新启动 web 服务器,因为它不再响应。
看看穆宁统计信息,我认识到,这与 Apache 进程的数量有关。它们不断增加,直到达到 150。然后 Apache 没有响应。
我该如何防止 Apache “冻结”?
统计数据的截图如下:
细节:
- 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 是否使用任何脚本/应用引擎?如果是,是什么?它是如何配置的?