问题描述
我的服务器(ubuntu 8.04)LAMP运行drupal 6,当流量很高时,它会停止提供页面服务。重启apache2将无法正常工作,因此我必须重新启动该服务。
我在apache2 error.log中找到了这条消息
[notice] caught SIGWINCH, shutting down gracefully
另外我注意到当apache停止响应时,apache2的进程id大约为12000。
更新
正如您所指出的,捕获的SIGWINCH是apache服务重新启动的通知。我和最大客户一起玩,并保持活力。我将MaxClients设置得太低,所以我得到了“服务器达到MaxClients设置,考虑提高MaxClients设置”错误,但修复了这个问题。
关于PID,我的安装安装了prefork module,因此在达到MaxRequestPerChild后,它会回收子进程。这就是PID定期上升的原因。仍然没有弄清楚为什么一段时间后apache停止响应。
同时将尝试上升MaxRequestPerChild,以便PID不会快速达到PID max。当前限制是32768(这是新debian和ubuntu安装的标准)。
这里有更多来自日志:
[Fri Apr 24 01:48:56 2009] [notice] caught SIGWINCH, shutting down gracefully
[Fri Apr 24 01:50:07 2009] [notice] Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch configured — resuming normal operations
[Fri Apr 24 17:13:35 2009] [error] [client 195.70.62.131] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Fri Apr 24 17:36:00 2009] [error] [client 212.188.33.4] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Sat Apr 25 20:05:07 2009] [error] [client 84.243.222.12] Invalid URI in request GET HTTP/1.1 HTTP/1.1
[Sat Apr 25 20:05:12 2009] [error] [client 84.243.222.12] script not found or unable to stat: /usr/lib/cgi-bin/twiki
[Sat Apr 25 20:05:12 2009] [error] [client 84.243.222.12] script not found or unable to stat: /usr/lib/cgi-bin/wiki
[Sat Apr 25 20:05:12 2009] [error] [client 84.243.222.12] script not found or unable to stat: /usr/lib/cgi-bin/wikis
[Sat Apr 25 21:46:46 2009] [error] [client 211.68.23.167] Invalid URI in request GET HTTP/1.1 HTTP/1.1
[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] Graceful restart requested, doing restart
最佳解决方案
好吧,在Ubuntu上启动和停止Apache的某些情况下使用SIGWINCH。如果我在我的Ubuntu 8.10服务器上执行sudo apache2ctl graceful-stop
,我会在日志中看到:
[Fri Apr 24 22:41:15 2009] [notice] caught SIGWINCH, shutting down gracefully
我记得它,SIGWINCH也被一些需要在旋转日志,夜间工作等时重启Apache的服务使用。
这并不能解释您目前遇到的问题,但我认为您的服务器上可能正在运行其他正在重启Apache的东西 – 或者它可能与您的问题无关。
如果可以的话,尝试发布更多的日志文件,分析会更容易:)
次佳解决方案
SIGWINCH
事实上,@ Stefano是对的:SIGWINCH意味着SIGNAL WINDOWS CHANGE,当终端检测到其窗口大小发生变化时,会自动发送,以便重新绘制。
SIGWINCH for apache2
但不幸的是,apache2
进程很难误用这个信号(就像他们转移它的第一个含义一样),但是为了防御,他们似乎没有选择,因为缺乏信号而不得不求助于此(见bug report)。他们的一个假设是apache2
过程总是在后台。所以@mikl也是完全正确的。
那么,要检查什么?
-
任何自动重启apache2的原因(cron服务,apt-get安装相关服务……)
-
否则,你是否在开放的tty中在前台运行apache2?如果是,建议不要这样做(唉),在调整控制终端大小时,你可能很容易轻松点击这个SIGWINCH gracefull关机。
第三种解决方案
呃?如果我没记错的话,SIGWINCH是一个信号,当终端窗口的大小发生变化时,它会被发送到终端应用程序(这样应用程序就可以自行调整大小)。通常由ncurses应用程序使用。
这很奇怪。这些信息是否为您提供了额外的提示?
第四种方案
在Apache上,SIGWINCH是Graceful Stop信号。请注意,这与SIGUSR1不同,后者是Graceful Restart信号。
不幸的是,我们需要更多信息来告诉你为什么Apache优雅地停止。