httpd 在重新加载后退出 - slotmem-shm

httpd 在重新加载后退出 - slotmem-shm

我当前的 httpd 部署设置包括生成新的配置文件、重新链接配置目录,然后重新加载 apache 服务。此过程对我的大多数主机都运行良好,但是在我的代理主机上,httpd 服务在发出重新加载后会退出。

例子:

/config/aaaa/*.conf
/config/bbbb/*.conf

/config/active -> /config/aaaa

在我的主httpd配置文件文件,

require /config/active/*.conf

部署过程将删除该链接,并重新链接一个新的配置目录。

发出后

systemctl reload httpd

错误

在进程终止之前,我的日志中出现了以下错误。

(28)设备上没有剩余空间:AH02611:创建:apr_shm_create(/etc/httpd/run/slotmem-shm-p975c3056_scanner_2.shm)失败

调试

我有足够的可用磁盘空间:

[root@proxy3 log]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/cl_template-root  3.8G  3.4G  363M  91% /
tmpfs                         989M  102M  888M  11% /run
//10.3.36.10/config3          3.8G  2.6G  1.3G  68% /config

当服务器运行时,该目录只有6M。

[root@proxy3 ~]# du -h /etc/httpd/run/
0       /etc/httpd/run/htcacheclean
6.0M    /etc/httpd/run/

包含约 1500 个文件

[root@proxy3 ~]# du -h /etc/httpd/run/* | wc -l
1521

可用内存(应清除缓存)

[root@proxy3 httpd]# free
              total        used        free      shared  buff/cache   available
Mem:        2025016      408128      113756      111216     1503132     1352584

我的信号量和 ulimit 似乎很好

[root@proxy3 httpd]# sysctl -a | grep sem
kernel.sem = 32000      1024000000      500     32000

[root@proxy3 httpd]# ipcs -l

------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509481980
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767

[root@proxy3 httpd]# ulimit
unlimited

版本信息

[root@proxy3 log]# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   May 20 2021 04:33:06

[root@proxy3 log]# uname -r
4.18.0-305.19.1.el8_4.x86_64

我还能做什么来调试/纠正此故障模式?我目前的解决方法是在服务退出后重新启动服务,但这只是一个权宜之计。

答案1

从错误信息中检查目录的可用空间和大小:

df -h /etc/httpd/run/
du -h /etc/httpd/run/*

Red Hat httpd 软件包有一个符号链接 /etc/httpd/run/ -> /run/httpd。将 httpd DefaultRuntimeDir 存储放在系统 tmpfs 中,而不改变其相对于 ServerRoot 的约定。请注意,这意味着您应该注意 /run。

什么是日志代码 02611反正?模块 mod_slotmem_shm它提供了一个通用的共享内存 API,因此请检查所有已加载的模块,看它们是否使用它在工作器之间共享状态。根据观察和容量规划,可以大致确定大小可以达到多少。

关于如何缓解此问题,假设 tmpfs 已满,则为主机分配更多内存可以为其提供更多空间。或者,您可以调整 MPM 以减少工作程序数量,或者调整配置以减少共享状态。最后,考虑将 DefaultRuntimeDir 移动到具有足够空间的某个临时目录。

文件支持的共享内存映射不是您使用 ipcs 看到的 System V shm。APR 是可移植的,并提供了很多选项,但我认为在这个操作系统上是基于文件和 mmap 的。

说到空间,363M 可用空间(91% 使用)并不是很多,即使是在小型主机上也是如此。日志文件和包更新事务等通常需要更多空间。

答案2

您的 / 文件系统上只有 350Mio 可用。您确定足够吗?在所有情况下,消耗超过 90% 的磁盘空间应该是一个关键事实 ;)

相关内容