Отправить заявку

Ошибка No space left on device: Couldn''t create accept lock

В один прекрасный момент на рабочем сервере вырубился Apache и больше не хотел запускаться. Т.к. апач стоит в связке с nginx - первый репортовал ошибку, что не может отдать запрос дальше (т.е. апачу).После старта руками сервер Apache выдавал сообщение "failed".

В логах при этом шли записи /var/log/httpd/error.log:

[emerg]  (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock)

Как закончилось место? Смотрим df - и видим, что у нас свободно 720GB. Копаем дальше и выясняем, что эта ошибка довольно редкая, в основном связана с неосвобождением системой семафоров, которые выделяет для себя apache. Выполните команду:
# ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x00000000 0          root       600        1
0x00000000 65537      root       600        1
0x0000014c 98306      root       600        1
0x00000000 163843     apache     600        1
0x00000000 196612     apache   600        1
0x00000000 229381    apache 600        1
0x00000000 262150     apache 600        1
0x00000000 294919     apache 600        1

При попытке стартовать веб-сервис, система хочет выделить семфоры, но операционная система сообщая о том, что свободного место в таблице нет, отсюда и сообщение No space left on device.

Если ситуация повторяется - можно чистить семафоры автоматически скриптом запихнув его в крон.

#!/bin/bash
sems=$(ipcs -s | grep apache | awk --source '/0x0*.*[0-9]* .*/ {print $2}')
for sem in $sems
do
  ipcrm sem $sem
done

Измените имя пользователя apache на свое, если у вас Apache запускается от другого имени пользователя.

Другие публикации