Моя текущая настройка развертывания httpd включает в себя создание новых файлов конфигурации, повторное связывание каталога конфигурации, а затем перезагрузку службы apache. Этот процесс отлично работает для большинства моих хостов, однако на моих прокси-хостах служба httpd завершает работу после перезагрузки.
Пример:
/config/aaaa/*.conf
/config/bbbb/*.conf
/config/active -> /config/aaaa
И в моем основном файле httpd.conf
require /config/active/*.conf
процесс развертывания удалит ссылку и повторно создаст новую папку конфигурации.
После выдачи
systemctl reload httpd
Ошибка
У меня есть следующая ошибка в моих журналах, прежде чем процесс просто умирает.
(28)Нет свободного места на устройстве:AH02611:создать:апр_shm_создать(/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
Мои семафоры и ulimits выглядят нормально
[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
Что еще я могу сделать, чтобы отладить / исправить этот режим сбоя? Мой текущий обходной путь — просто перезапустить службу после ее закрытия, однако это лишь временная-помощь.
Проверьте свободное место и размер каталога из сообщения об ошибке.:
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 общей памяти, Generic, поэтому проверьте все загруженные модули на предмет того, используют ли они это для обмена состоянием между воркерами. Приблизительный порядок величины возможного увеличения размера на основе наблюдений и планирования емкости.
Что касается того, как смягчить проблему, предположив, что tmpfs заполняется, выделение хосту немного большего объема памяти может дать ему больше места. Или вы можете настроить MPM так, чтобы у него было меньше рабочих процессов, или иным образом настроить конфигурацию, чтобы иметь меньше общего состояния. Наконец, рассмотрите возможность перемещения DefaultRuntimeDir во временный каталог с достаточным пространством.
Карты общей памяти с файловой поддержкой не являются System V shm, которые вы можете увидеть с помощью ipcs. APR является переносимым и предоставляет множество опций, но я думаю, что в этой ОС он основан на файлах и mmap.
Что касается пространства, то 363 МБ свободного места, используемого на 91%, не так уж и много, даже на небольшом хосте. Такие вещи, как файлы журналов и транзакции обновления пакетов, обычно требуют большего.