我的服务器(ubuntu 8.04)LAMP运行drupal 6,当有高流量时,它停止服务页面。重新启动apache 2将不起作用,所以我必须重新启动服务。
我在apache 2 error.log中发现了此消息
[notice]捕获SIGWINCH,优雅地关闭
我还注意到apache 2的进程id在apache停止响应时大约是12000。
更新
捕获的SIGWINCH,正如你所指出的,是apache服务重新启动的通知。我玩了一下max clients并保持活着。我将MaxClients设置得太低,所以我得到了一个“服务器达到MaxClients设置,考虑提高MaxClients设置”错误,但修复了这个错误。
关于PID,我的安装安装了prefork module,所以达到MaxRequestPerChild后,它会回收子进程。这就是为什么PID会周期性上升。仍然没有弄清楚为什么过了一段时间apache停止响应。
在此期间,将尝试提高MaxRequestPerChild,以便PID不会那么快达到PID max。当前限制为32768(这是新的debian和ubuntu安装的标准)。
下面是更多的日志:
[Fri 2009年4月24日01:48:56] [notice] caught SIGWINCH,shutting down graceful
[Fri Apr 24 01:50:07 2009] [notice] Apache/2.2.8(Ubuntu)PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch configured --receiving normal operations
[Fri Apr 24 17:13:35 2009] [error] [client195.70.62.131] client sent HTTP/1.1 request without hostname(see RFC2616 section 14.23):/w00tw00t.at.ISC.SANS.D查找:)
[Fri Apr 24 17:36:00 2009] [error] [client212.188.33.4] client sent HTTP/1.1 request without hostname(see RFC2616 section 14.23):/w00tw00t.at.ISC.SANS.D查找:)
[Sat Apr 25 20:05:07 2009] [error] [client84.243.222.12] Invalid URI in request GET HTTP/1.1 HTTP/1.1
[Sat Apr 25 20:05:12 2009] [error] [client84.243.222.12] script not found or unable to stat:/usr/lib/cgi-bin/twiki
[Sat Apr 25 20:05:12 2009] [error] [client84.243.222.12] script not found or unable to stat:/usr/lib/cgi-bin/wiki
[Sat Apr 25 20:05:12 2009] [error] [client84.243.222.12] script not found or unable to stat:/usr/lib/cgi-bin/wikis
[Sat Apr 25 21:46:46 2009] [error] [client211.68.23.167] Invalid URI in request GET HTTP/1.1 HTTP/1.1
[Sun 2009年4月26日06:13:47] [error] [client86.39.154.89] client sent HTTP/1.1 request without hostname(see RFC2616 section 14.23):/w00tw00t.at.ISC.SANS.D查找:)
[Sun[notice] Graceful restart requested,doing restart
5条答案
按热度按时间wqlqzqxt1#
SIGWINCH
事实上,@Stefano是对的:SIGWINCH是SIGNAL WINDOWS CHANGE的意思,当终端检测到窗口大小发生变化时,SIGWINCH会自动发送,以允许重画。
SIGWINCH for apache2
但不幸的是,
apache2
进程错误地使用了这个信号(在他们转移其第一个含义的方式中),但为了他们的辩护,他们似乎没有选择,不得不诉诸于此,由于缺乏信号(参见bug report)。他们的假设之一是,apache2
进程总是在后台。所以@mikl也是完全正确的。所以,检查什么?
lpwwtiir2#
如果我没记错的话,SIGWINCH是一个信号,当终端窗口的大小改变时,它会被发送到终端应用程序(这样应用程序就可以调整自己的大小)。通常由ncurses应用程序使用。
这很奇怪。这个信息是否给了你额外的提示?
ccgok5k53#
在Ubuntu上启动和停止Apache时,在某些情况下会使用SIGWINCH。如果我在Ubuntu 8.10服务器上执行
sudo apache2ctl graceful-stop
,我会在日志中看到以下内容:在我的记忆中,SIGWINCH也被一些服务使用,这些服务在循环日志、夜间作业等时需要重新启动Apache。
这并不能解释您当前遇到的问题,但我认为可能是服务器上运行的其他东西重新启动了Apache --或者它可能与您的问题根本无关。
如果可以的话,试着发布更多的日志文件,这将更容易分析:)
lyr7nygr4#
在Apache上,SIGWINCH是Graceful Stop信号。请注意,这与SIGUSR1不同,后者是Graceful Restart信号。
不幸的是,我们需要更多的信息来告诉你为什么Apache优雅地停止了。
5lwkijsr5#
我在K8s集群中运行
php:7.4-apache
镜像时遇到了这个错误,我想在这里分享我的解决方案。我的特定Docker镜像在Dockerfile中的某个地方有
STOPSIGNAL SIGWINCH
。STOPSIGNAL
定义了当docker stop
命令运行时将发送给进程的信号。这意味着每当我的Kubernetes Liveliness和Readiness探测器失败,我想重新启动容器时,我会在容器刚刚启动时遇到SIGWINCH错误。如果apache2由于一些配置错误而无法运行,Readiness Probes将重新启动容器,给你SIGWINCH错误,这不是根本原因。
运行apache2 vs apache2ctl
当我的docker文件中有
CMD apache2 -DFOREGROUND
时,我得到了这个错误:原来
DefaultRuntimeDir
是在/etc/apache2/envvars
上定义的,它必须在apache2运行之前加载。我注意到用apache2
运行进程不会加载这个文件。我的解决方案是使用我的docker镜像提供的
apache2ctl
。最终的dockerfile看起来像这样:CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
。