![Apache httpd 工作进程崩溃(Centos 7 上的 IUS httpd24u)](https://linux22.com/image/774981/Apache%20httpd%20%E5%B7%A5%E4%BD%9C%E8%BF%9B%E7%A8%8B%E5%B4%A9%E6%BA%83%EF%BC%88Centos%207%20%E4%B8%8A%E7%9A%84%20IUS%20httpd24u%EF%BC%89.png)
我正在运行 httpd24u 包宫内节育器在两台 Centos 7 服务器上。该软件包的版本标识符为“2.4.52-1.el7.ius”。
在过去一周左右的时间里,我们一直看到服务器出现间歇性中断的 HTTP 响应。浏览器报告“net::ERR_CONNECTION_CLOSED”,服务器错误日志包含如下输出:
*** Error in `/usr/sbin/httpd': free(): invalid next size (fast): 0x00007fb394015f10 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x81329)[0x7fb3cf231329]
/lib64/libcrypto.so.10(CRYPTO_free+0x1d)[0x7fb3c7b1396d]
/lib64/libcrypto.so.10(EVP_MD_CTX_cleanup+0xe9)[0x7fb3c7bd0a69]
/lib64/libcrypto.so.10(+0x1275ee)[0x7fb3c7bcc5ee]
/lib64/libssl.so.10(ssl23_accept+0x39)[0x7fb3c7f37409]
/etc/httpd/modules/mod_ssl.so(+0x18352)[0x7fb3c0122352]
/etc/httpd/modules/mod_ssl.so(+0x19ed6)[0x7fb3c0123ed6]
/etc/httpd/modules/mod_ssl.so(+0xdad0)[0x7fb3c0117ad0]
/usr/sbin/httpd(ap_run_process_connection+0x40)[0x55a2b89abe10]
/etc/httpd/modules/mod_mpm_event.so(+0x714a)[0x7fb3c25db14a]
/etc/httpd/modules/mod_mpm_event.so(+0x7d9e)[0x7fb3c25dbd9e]
/lib64/libpthread.so.0(+0x7ea5)[0x7fb3cf789ea5]
/lib64/libc.so.6(clone+0x6d)[0x7fb3cf2aeb0d]
======= Memory map: ========
55a2b8955000-55a2b89e1000 r-xp 00000000 08:03 1879095252 /usr/sbin/httpd
55a2b8be0000-55a2b8be3000 r--p 0008b000 08:03 1879095252 /usr/sbin/httpd
55a2b8be3000-55a2b8be5000 rw-p 0008e000 08:03 1879095252 /usr/sbin/httpd
55a2b8be5000-55a2b8be9000 rw-p 00000000 00:00 0
55a2b9fea000-55a2ba3a0000 rw-p 00000000 00:00 0 [heap]
55a2ba3a0000-55a2ba46c000 rw-p 00000000 00:00 0 [heap]
7fb34c000000-7fb34c021000 rw-p 00000000 00:00 0
7fb34c021000-7fb350000000 ---p 00000000 00:00 0
7fb354000000-7fb354074000 rw-p 00000000 00:00 0
7fb354074000-7fb358000000 ---p 00000000 00:00 0
7fb358000000-7fb358021000 rw-p 00000000 00:00 0
(内存映射持续数页。)
我不知道如何解释这个错误信息。我知道“free():下一个大小无效”表示内存错误(试图free()
取消分配内存或将free()
同一内存加倍)。
我能想到的最近发生的几件可能相关的事件有:
- httpd24u 软件包最近才更新。所有 httpd 文件(模块等)的最后修改时间都是 1 月 7 日。不过,我认为我们的问题不会追溯到那么久以前。
- 我们最近(2 月 3 日)启用了 HTTP/2。这还涉及将 httpd 从“worker” MPM 切换到“event” MPM(至少在其中一台服务器上)。
显然,下一个故障排除步骤是禁用 HTTP/2,看看错误是否消失。但是,即使这有帮助,我们也不想长时间不使用 HTTP/2,因为它提供了性能改进。在这种情况下我还能尝试什么?
--
更新:恢复到 2.4.51(没有其他更改)提高了我们服务器的可靠性,我认为是因为这个错误是在 2.4.52 中创建的:https://bz.apache.org/bugzilla/show_bug.cgi?id=65769
答案1
这个 httpd 随机崩溃问题也影响了我们的 CentOS 服务器。它似乎也与 MPM 工作模块有关。毫无明显原因(当然不是在负载下)httpd 崩溃了,尽管服务器报告它仍在运行并且正常。UptimeRobot 迅速报告服务器上的所有站点都瘫痪了,这通常非常可靠。今天已经发生过两次了,第一次发生在上周五,即 2 月 11 日。在那之前根本没有发生过。