【问题标题】:What is in Apache 2 a "caught SIGWINCH" error?Apache 2 中的“捕获 SIGWINCH”错误是什么?
【发布时间】:2010-10-21 07:39:18
【问题描述】:

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

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

[notice] 抓到 SIGWINCH,正在关闭 优雅地倒下

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

更新

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

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

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

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

[2009 年 4 月 24 日星期五 01:48:56] [通知] 抓住了 SIGWINCH,正在关闭 优雅地

[2009 年 4 月 24 日星期五 01:50:07] [通知] 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] 中的 URI 无效 请求 GET HTTP/1.1 HTTP/1.1

[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] 中的 URI 无效 请求 GET HTTP/1.1 HTTP/1.1

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

[2009 年 4 月 26 日星期日 06:53:07] [通知] 请求优雅重启,正在执行 重启

【问题讨论】:

    标签: ubuntu apache2 signals


    【解决方案1】:

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

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

    【讨论】:

    • 在“[notice] 捕获 SIGWINCH 10 秒后,优雅地关闭。有一个“[notice] Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin - 补丁配置——恢复正常操作”
    • @serv-inc 没错,这是一个糟糕的设计。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 是的,你在 sigwinch 上的权利,在日志上添加了更多内容。谢谢。
    • 嗯,日志转储中没有任何内容表明真正的问题是什么。问题发生时,您的内存状态如何? MaxClients 的调整可能很棘手——如果将其设置为高,Apache 将吃掉所有可用内存并进入完全死锁。另外,你启用了什么 Apache 模块?
    • 我有 1GB 内存,出现问题时有 600MB 可用。启用的模块是 rewrite、php5、mime 和 cgi。也许 Apache 不是问题,我会尝试安装 Debian 的一个移动站点,有时是“更便宜”只是从一个干净的袖子开始。谢谢
    • 对我来说,我的主机文件有未知的 ip,它指向主机在配置服务器时设置的服务器主机名。在我删除它之后,这个 sigwinch 错误从错误日志中消失。
    • 在交互式 Docker 容器中运行 apache 时经常发生这种情况。调整终端窗口的大小,apache 关闭...很高兴终于知道原因。
    【解决方案3】:

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

    很遗憾,我们需要更多信息来告诉您为什么 Apache 会正常停止。

    【讨论】:

      【解决方案4】:

      SIGWINCH

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

      用于 apache2 的 SIGWINCH

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

      那么,要检查什么?

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

      【讨论】:

      • 感谢谁会想到调整终端窗口的大小会产生如此意想不到的后果!
      • 除非它不在后台,例如在docker容器中运行时。我刚刚度过了愉快的 dafuq 时刻。
      • 当你想通过docker run -it --rm apache 快​​速安装一些东西时,这真的很难。
      • 我遇到了同样的问题,我在这里找到了答案。我使用docker run 在前台运行Apache 而没有--detach。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2022-10-05
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      相关资源
      最近更新 更多