37

我的服务器(ubuntu 8.04)运行drupal 6的LAMP,当流量很大时,它会停止提供页面。重新启动 apache2 将不起作用,所以我必须重新启动服务。

我在 apache2 error.log 中发现了这条消息

[通知] 抓到 SIGWINCH,优雅关闭

我还注意到 apache2 的进程 id 在 apache 停止响应时大约为 12000。

更新

正如您所指出的,捕获的 SIGWINCH 是 apache 服务重新启动的通知。我与最大客户一起玩并保持活力。我将 MaxClients 设置得太低,因此出现“服务器已达到 MaxClients 设置,请考虑提高 MaxClients 设置”错误,但已解决此问题。

关于 PID,我的安装已经安装了prefork 模块,所以在达到MaxRequestPerChild之后,它会回收子进程。这就是 PID 周期性上升的原因。仍然没有弄清楚为什么一段时间后apache停止响应。

与此同时,将尝试提高 MaxRequestPerChild,这样 PID 就不会那么快地达到 PID max。当前限制为 32768(这是新的 debian 和 ubuntu 安装的标准)。

以下是日志中的更多内容:

[Fri Apr 24 01:48:56 2009] [notice] 抓到 SIGWINCH,优雅关闭

[Fri Apr 24 01:50:07 2009] [notice] Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 配置了 Suhosin-Patch -- 恢复正常操作

[2009 年 4 月 24 日星期五 17:13:35] [错误] [客户端 195.70.62.131] 客户端发送了没有主机名的 HTTP/1.1 请求(参见 RFC2616 第 14.23 节):/w00tw00t.at.ISC.SANS.DFind:)

[2009 年 4 月 24 日星期五 17:36:00] [错误] [客户端 212.188.33.4] 客户端发送的 HTTP/1.1 请求没有主机名(参见 RFC2616 第 14.23 节):/w00tw00t.at.ISC.SANS.DFind:)

[2009 年 4 月 25 日星期六 20:05:07] [错误] [客户端 84.243.222.12] 请求 GET HTTP/1.1 HTTP/1.1 中的 URI 无效

[2009 年 4 月 25 日星期六 20:05:12] [错误] [客户端 84.243.222.12] 找不到脚本或无法统计:/usr/lib/cgi-bin/twiki

[2009 年 4 月 25 日星期六 20:05:12] [错误] [客户端 84.243.222.12] 找不到脚本或无法统计:/usr/lib/cgi-bin/wiki

[2009 年 4 月 25 日星期六 20:05:12] [错误] [客户端 84.243.222.12] 找不到脚本或无法统计:/usr/lib/cgi-bin/wikis

[2009 年 4 月 25 日星期六 21:46:46] [错误] [客户端 211.68.23.167] 请求 GET HTTP/1.1 HTTP/1.1 中的 URI 无效

[Sun Apr 26 06:13:47 2009] [error] [client 86.39.154.89] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Sun Apr 26 06:53:07 2009] [notice] 请求优雅重启,正在重启

4

4 回答 4

45

信号机

事实上,@Stefano 是对的:SIGWINCH 表示 SIGNAL WINDOWS CHANGE,当终端检测到其窗口大小发生变化以允许重绘时会自动发送。

用于 apache2 的 SIGWINCH

但不幸apache2的是,进程错误地滥用了这个信号(以他们转移其第一个含义的方式),但为了他们的防御,他们似乎别无选择,并且由于缺乏信号而不得不求助于这个(参见错误报告)。他们的假设之一是apache2进程总是在后台。所以@mikl 也完全正确。

那么,要检查什么?

  • 正常重启 apache2 的任何自动原因(cron 服务,相关服务的 apt-get 安装......)
  • 否则,您是否在开放的 tty 中在前台运行 apache2 ?如果是,则不建议这样做(唉),并且在调整控制终端的大小时,您可能会很容易地遇到此 SIGWINCH 优雅关闭。
于 2015-09-18T08:19:52.440 回答
20

呃?如果我没记错的话,SIGWINCH 是一个在终端窗口大小发生变化时发送到终端应用程序的信号(以便应用程序可以自行调整大小)。通常由 ncurses 应用程序使用。

这很奇怪。此信息是否为您提供了额外的提示?

于 2009-04-23T09:07:21.670 回答
15

好吧,在 Ubuntu 上启动和停止 Apache 时,会在某些情况下使用 SIGWINCH。如果我sudo apache2ctl graceful-stop在我的 Ubuntu 8.10 服务器上这样做,我会在我的日志中得到这个:

[Fri Apr 24 22:41:15 2009] [notice] caught SIGWINCH, shutting down gracefully

我记得,一些需要在轮换日志、夜间作业等时重新启动 Apache 的服务也使用 SIGWINCH。

这并不能解释您当前遇到的问题,但我认为它可能是在您的服务器上运行的其他东西正在重新启动 Apache——或者它可能与您的问题根本无关。

如果可以的话,尝试发布更多的日志文件,这样分析起来会容易得多:)

于 2009-04-24T20:43:29.777 回答
6

在 Apache 上,SIGWINCH 是Graceful Stop信号。请注意,这与 SIGUSR1 不同,后者是Graceful Restart信号。

不幸的是,我们需要更多信息来告诉您为什么 Apache 会优雅地停止。

于 2009-04-24T21:19:39.627 回答