ubuntu 什么是Apache 2中的“caught SIGWINCH”错误?

wljmcqd8  于 2023-04-20  发布在  Apache
关注(0)|答案(5)|浏览(200)

我的服务器(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

wqlqzqxt

wqlqzqxt1#

SIGWINCH

事实上,@Stefano是对的:SIGWINCH是SIGNAL WINDOWS CHANGE的意思,当终端检测到窗口大小发生变化时,SIGWINCH会自动发送,以允许重画。
SIGWINCH for apache2
但不幸的是,apache2进程错误地使用了这个信号(在他们转移其第一个含义的方式中),但为了他们的辩护,他们似乎没有选择,不得不诉诸于此,由于缺乏信号(参见bug report)。他们的假设之一是,apache2进程总是在后台。所以@mikl也是完全正确的。

所以,检查什么?

  • 任何自动重启apache 2的原因(cron服务,相关服务的apt-get安装...)
  • 否则,你会在一个打开的tty中在前台运行apache 2吗?如果是的话,这是不推荐的(唉),当调整你的控制终端的大小时,你可能很容易就碰到这个SIGWINCH优雅的关闭。
lpwwtiir

lpwwtiir2#

如果我没记错的话,SIGWINCH是一个信号,当终端窗口的大小改变时,它会被发送到终端应用程序(这样应用程序就可以调整自己的大小)。通常由ncurses应用程序使用。
这很奇怪。这个信息是否给了你额外的提示?

ccgok5k5

ccgok5k53#

在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 --或者它可能与您的问题根本无关。
如果可以的话,试着发布更多的日志文件,这将更容易分析:)

lyr7nygr

lyr7nygr4#

在Apache上,SIGWINCH是Graceful Stop信号。请注意,这与SIGUSR1不同,后者是Graceful Restart信号。
不幸的是,我们需要更多的信息来告诉你为什么Apache优雅地停止了。

5lwkijsr

5lwkijsr5#

我在K8s集群中运行php:7.4-apache镜像时遇到了这个错误,我想在这里分享我的解决方案。
我的特定Docker镜像在Dockerfile中的某个地方有STOPSIGNAL SIGWINCHSTOPSIGNAL定义了当docker stop命令运行时将发送给进程的信号。
这意味着每当我的Kubernetes Liveliness和Readiness探测器失败,我想重新启动容器时,我会在容器刚刚启动时遇到SIGWINCH错误。如果apache2由于一些配置错误而无法运行,Readiness Probes将重新启动容器,给你SIGWINCH错误,这不是根本原因。

运行apache2 vs apache2ctl

当我的docker文件中有CMD apache2 -DFOREGROUND时,我得到了这个错误:

Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

原来DefaultRuntimeDir是在/etc/apache2/envvars上定义的,它必须在apache2运行之前加载。我注意到用apache2运行进程不会加载这个文件。
我的解决方案是使用我的docker镜像提供的apache2ctl。最终的dockerfile看起来像这样:CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]

相关问题