«Недостаточно места на устройстве: AH00023: Не удалось создать mpm-accept мьютекс» при перезапуске httpd.

Вопрос или проблема

Мой сервер иногда заполняется соединениями в Apache, застревающими в состоянии “Sending Reply”, из-за чего мне приходится перезапускать Apache. Обычно это работает, но иногда я получаю эту ошибку при попытке перезапустить Apache:

Job for httpd.service failed because the control process exited with
error code. See "systemctl status httpd.service" and "journalctl -xe"
for details.

Запуск systemctl status httpd.service или journalctl -xe, как рекомендуется, возвращает следующую соответствующую информацию:

Nov 15 06:24:06 hostname.biologyreporter.com systemd-logind[874]:
 Failed to remove runtime directory /run/user/1067: Device or resource busy

Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 [Fri Nov 15 06:24:27.255594 2019] [core:emerg] [pid 29509:tid 47498001208384]
 (28) No space left on device: AH00023: Couldn't create the mpm-accept mutex  

Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 (28) No space left on device: could not create accept mutex  

Nov 15 06:24:27 hostname.biologyreporter.com restartsrv_httpd[29484]:
 AH00015: Unable to open logs

Nov 15 06:24:27 hostname.biologyreporter.com systemd[1]:
 httpd.service: control process exited, code=exited status=1  

Nov 15 06:24:27 hostname.biologyreporter.com systemd[1]:
 Failed to start Apache web server managed by cPanel EasyApache.
 -- Subject: Unit httpd.service has failed

Апачу может потребоваться около 10 минут для перезапуска и восстановления работы сайта. Я не понимаю, почему говорится “No space left on device”, так как выполнение df, например, возвращает следующее (нигде 100% пространства не занято):

Filesystem     1K-blocks      Used Available Use% Mounted on
devtmpfs         3973024         0   3973024   0% /dev
tmpfs            3983400         0   3983400   0% /dev/shm
tmpfs            3983400    255296   3728104   7% /run
tmpfs            3983400         0   3983400   0% /sys/fs/cgroup
/dev/sda2      952008348 137586024 766039760  16% /
/dev/sda1         999320    134892    795616  15% /boot
/dev/loop0       3997376      8856   3778808   1% /tmp
tmpfs             796684         0    796684   0% /run/user/0
tmpfs             796684         0    796684   0% /run/user/1022

Мне не удалось найти надежную информацию о причине и решении указанных выше ошибок

  • No space left on device: AH00023: Couldn't create the mpm-accept mutex и
  • Failed to remove runtime directory /run/user/1067: Device or resource busy

Что мне делать, чтобы решить эту проблему, чтобы эти ошибки не возникали и Apache всегда перезапускался без проблем?

Скорее всего, это вызвано ограничением семафоров ОС и тем, что Apache не очищает за собой.

Подробнее об ограничениях семафоров см. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/sect-oracle_9i_and_10g_tuning_guide-setting_semaphores-setting_semaphore_parameters

Эти ошибки означают, что в системе недостаточно ресурсов для межпроцессного взаимодействия, таких как семафоры или сегменты общей памяти.
Попробуйте выполнить следующее, чтобы увидеть, достигнуто ли ограничение семафоров, и посмотрите результаты:

ipcs -s | wc -l

cat /proc/sys/kernel/msgmni

cat /proc/sys/kernel/sem

Выполните следующую команду через SSH или консоль и посмотрите, поможет ли это:

ipcs -s | awk -v user=apache '$3==user {system("ipcrm -s "$2)}'

ipcs -s выводит список используемых в настоящее время семафоров.

awk -v user=apache фильтрует только те, которые принадлежат пользователю apache, и следующая часть выполняет icprm -s "id" для каждого из них, удаляя этот семафор.

Т.е. вся команда удаляет все семафоры, принадлежащие пользователю apache.

Хотя ответ от @dzup4uk, кажется, указывает на то, в чем проблема, для фактического решения проблемы необходимо убедиться, что семафоры очищаются.
Команда ipcs покажет, в чем проблема, но для фактического решения проблемы потребуется очистка, которую можно сделать с помощью

ipcrm -a

Если ваш Apache работает под пользователем nobody, тогда вы должны запустить это с nobody следующим образом:

ipcs -s | awk -v user=nobody '$3==user {system("ipcrm -s "$2)}'

Решение для меня (для разблокировки всех семафоров):

for i in `ipcs -s  | awk '{print $2}'`; do ipcrm sem $i; done

либо фильтрация по пользователю:

for i in `ipcs -s | grep apache | awk '{print $2}'`; do ipcrm sem $i; done

Ответ или решение

Ошибка "No space left on device: AH00023: Couldn’t create the mpm-accept mutex" при перезапуске Apache (httpd) может вызывать множество неудобств. Давайте разберем причины, примеры и практические решения этой проблемы.

Теория

Ошибка "No space left on device" возникает не из-за нехватки дискового пространства, как можно было бы предположить на первый взгляд, а вследствие исчерпания системных ресурсов, таких как семафоры. В контексте операционных систем Unix и Linux семафоры используются для управления доступом к общим ресурсам при многопоточных процессах. Apache использует семафоры для координации работы между процессами и потоками.

Ошибки, подобные "Couldn’t create the mpm-accept mutex," указывают на то, что системе не хватает ресурсов для создания нового мьютекса (механизма синхронизации). В данном случае, это вызвано именно тем, что система больше не может выделить новые семафоры Apache, чтобы обеспечить его работоспособность.

Пример

В приведенном вами логе мы видим несколько важных сообщений, которые помогают понять суть проблемы. Например, строка с "[core:emerg] [pid 29509:tid 47498001208384] (28) No space left on device: AH00023: Couldn’t create the mpm-accept mutex" указывает на то, что Apache не удается создать необходимый мьютекс из-за нехватки нискозависимых ресурсов, таких как семафоры.

Также важно учитывать ошибки вроде "Failed to remove runtime directory /run/user/1067: Device or resource busy", что может говорить о неудачах в освобождении системных ресурсов, что также влияет на работу Apache.

Применение

Теперь перейдем к решению проблемы. Наиболее вероятной причиной данной ошибки является перегруженность системы семафорами. Это может происходить из-за некорректной очистки семафоров при завершении работы Apache, что со временем заполняет все доступные семафоры.

Шаги для исправления:

  1. Проверка текущего состояния семафоров:

    Чтобы выявить, не исчерпано ли количество семафоров, можно использовать команды:

    ipcs -s | wc -l
    cat /proc/sys/kernel/msgmni
    cat /proc/sys/kernel/sem

    Первая команда покажет количество используемых семафоров, а две последние — значения ограничений для семафоров в системе.

  2. Очистка семафоров Apache:

    Для ручной очистки используемых семафоров, можно выполнить следующую команду:

    ipcs -s | awk -v user=apache '$3==user {system("ipcrm -s "$2)}'

    Эта команда удалит все семафоры, принадлежащие пользователю Apache.

  3. Автоматизация очистки:

    Для автоматического и безопасного удаления всех семафоров, связанных с Apache, которая может быть запущена, например, через cron:

    for i in `ipcs -s | grep apache | awk '{print $2}'`; do ipcrm sem $i; done
  4. Настройка системы для предотвращения переполнения:

    Убедитесь, что конфигурация Apache и системы настроена на корректное управление ресурсами. Возможно, потребуется увеличить лимиты семафоров, изменив параметры в /etc/sysctl.conf:

    kernel.sem = 250 32000 100 128

    Эти значения могут варьироваться в зависимости от требований вашего сервера.

  5. Обновление и мониторинг:

    Убедитесь, что на сервере установлены все последние обновления для вашего дистрибутива Linux и Apache. Используйте инструменты мониторинга для отслеживания использования ресурсов, такие как Nagios, Zabbix, или Prometheus.

В заключение, исправление проблемы требует корректной настройки системных параметров, регулярного мониторинга и, возможно, переработки стратегии управления соединениями и обработчиками в Apache. Следуя предложенным шагам, вы сможете значительно сократить вероятность возникновения данных ошибок в будущем.

Оцените материал
Добавить комментарий

Капча загружается...