为什么 httpd 平滑重启需要这么长时间?

为什么 httpd 平滑重启需要这么长时间?

我正在检查 /usr/local/apache/logs/error_log

这种情况已经发生过好几次了。有时服务器重启很快,有时很慢。什么因素可能导致这种混乱。

[Mon Dec 31 21:40:49 2012] [notice] Graceful restart requested, doing restart
[Mon Dec 31 21:40:53 2012] [error] [client 66.249.74.237] File does not exist: /home2/wallpape/public_html/tag
[Mon Dec 31 21:40:53 2012] [error] [client 66.249.74.237] File does not exist: /home2/wallpape/public_html/404.shtml
[Mon Dec 31 21:50:02 2012] [notice] SSL FIPS mode disabled
[Mon Dec 31 21:50:03 2012] [notice] Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 configured -- resuming normal operations

另一方面,非正常重启似乎更快:

[Mon Dec 31 21:52:58 2012] [notice] SIGHUP received.  Attempting to restart
[Mon Dec 31 21:52:58 2012] [notice] SSL FIPS mode disabled
[Mon Dec 31 21:52:58 2012] [notice] Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 configured -- resuming normal operations

来自手册: http://httpd.apache.org/docs/2.2/stopping.html

父进程重新读取其配置文件并重新打开其日志文件。当每个子进程死亡时,父进程会用新一代配置中的子进程来替换它,这开始提供新的 立即请求

优雅重启似乎是为了使服务能够不间断地运行而设计的。但事实并非如此。重启时,我服务器中的所有域都死机了 :(

答案1

优雅重启等待所有当前连接关闭后再重启,而标准重启只是中止当前连接。

答案2

请注意,如果您的文件中有一个无效的主机名etc/hosts- 例如,如果您没有修改默认安装设置 - 那么您可能需要等待长达 90 秒才能执行各种任务,包括启动/重新启动 httpd。

vi /etc/hosts

改变

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1   localhost
::1         localhost
111.222.333.444  www.mysite.com mysite.com

参考:

为多个域提供服务的单个 IP 服务器的 /etc/hosts 条目

https://unix.stackexchange.com/questions/57439/slow-start-of-midnight-commander#answer-397879

答案3

使用优雅重启时,父 Apache 进程会停止接受新连接,并永远等待所有子进程退出。因此,实际上 Web 服务器处于死机状态(现有连接除外),直到所有现有子进程退出。

在短时间 http/https 连接的正常使用情况下,正常关闭或重启时这不是问题……通常需要一秒钟。问题在于,当你有延迟子进程退出的东西时,例如持久的 websocket 连接。在这种情况下,服务器将永远无法正常停止/重启……它将永远处于半死状态。

您可以使用 GracefulShutdownTimeout 指令调整延迟:

https://httpd.apache.org/docs/2.4/mod/mpm_common.html#gracefulshutdowntimeout

默认情况下设置为 0(无限)。5 秒是一个更合理的值。

请注意,使用 systemctl 重启服务器时,默认情况下它最多只会等待 90 秒,然后强制其终止子进程(而不是永远),这就是您看到这 90 秒延迟的原因。这是在 /etc/systemd/system.conf 中设置的:

#DefaultTimeoutStopSec=90s

也可以使用 TimeoutStopSec 选项针对各个单元进行更改。

相关内容