Добрый день.
Возникла проблема: Apache2 падает сразу после запуска.
То есть инициализация проходит:
# /etc/init.d/httpd start
Запускается httpd: [ OK ]
[Sun Jul 20 04:18:41 2014] [warn] pid file /etc/httpd/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Sun Jul 20 04:18:41 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23121) (5)
[Sun Jul 20 04:20:34 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 20 04:20:34 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 20 04:20:34 2014] [notice] Digest: done
[Sun Jul 20 04:20:34 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23306) (5)
[Sun Jul 20 04:21:51 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 20 04:21:51 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 20 04:21:51 2014] [notice] Digest: done
[Sun Jul 20 04:21:51 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23481) (5)
------ Пределы семафоров --------
максимальное количество массивов = 128
максимум семафоров на массив = 250
максимум семафоров на всю систему = 32000
максимум операций на вызов семафора = 32
максимальное значение семафора = 32767
Видим, что максимальное количество массивов = 128.
Теперь посмотрим, сколько же используется в данный момент:
# ipcs -su
------ Состояние семафора --------
использовано массивов = 127
выделено семафоров = 127
Видим, что используется 127 массивов, то есть у нас остается 1 свободный массив.
А вот сами все эти семафоры (Обычно в третьей колонке пишется имя пользователя от которого работает Apache2, но в данном случае было записано непонятное значение 4294967295, но это не суть):
Нужно очистить данные массивы семафоров, для этого создадим файл:
В команде grep нужно указать значение третьей колонки (чистить семафоры root'a лучше не стоит).
Сделаем скрипт выполняемым:
# chmod +x sems.sh
И запустим его:
# ./sems.sh
ресурсы(ы) удален(ы)
...
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
Возникла проблема: Apache2 падает сразу после запуска.
То есть инициализация проходит:
# /etc/init.d/httpd start
Запускается httpd: [ OK ]
Но если сразу глянуть состояние сервиса:
# /etc/init.d/httpd status
httpd не работает, но pid-файл существует
То видим, что Apache2 не работает:
# ps aux | grep http
root 23242 0.0 0.0 103256 904 pts/0 S+ 04:19 0:00 grep http
В error логе Apache2 увидел такое:
# tail /var/log/httpd/error_log[Sun Jul 20 04:18:41 2014] [warn] pid file /etc/httpd/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Sun Jul 20 04:18:41 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23121) (5)
[Sun Jul 20 04:20:34 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 20 04:20:34 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 20 04:20:34 2014] [notice] Digest: done
[Sun Jul 20 04:20:34 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23306) (5)
[Sun Jul 20 04:21:51 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 20 04:21:51 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 20 04:21:51 2014] [notice] Digest: done
[Sun Jul 20 04:21:51 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23481) (5)
Увидев: [Sun Jul 20 04:18:41 2014] [warn] pid file /etc/httpd/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run? удалял файл с pid'ом, но это не помогало.
Потом посмотрел на эту ошибку: [Sun Jul 20 04:20:34 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23306) (5) немного погуглив понял, что ошибка связана с переполнением таблицы семафоров.
Что такое семафоры можно почитать тут и тут.
Посмотрим пределы семафоров:
# ipcs -slПотом посмотрел на эту ошибку: [Sun Jul 20 04:20:34 2014] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.23306) (5) немного погуглив понял, что ошибка связана с переполнением таблицы семафоров.
Что такое семафоры можно почитать тут и тут.
Посмотрим пределы семафоров:
------ Пределы семафоров --------
максимальное количество массивов = 128
максимум семафоров на массив = 250
максимум семафоров на всю систему = 32000
максимум операций на вызов семафора = 32
максимальное значение семафора = 32767
Видим, что максимальное количество массивов = 128.
Теперь посмотрим, сколько же используется в данный момент:
# ipcs -su
------ Состояние семафора --------
использовано массивов = 127
выделено семафоров = 127
Видим, что используется 127 массивов, то есть у нас остается 1 свободный массив.
А вот сами все эти семафоры (Обычно в третьей колонке пишется имя пользователя от которого работает Apache2, но в данном случае было записано непонятное значение 4294967295, но это не суть):
# ipcs -s
------ Массивы семафоров --------
ключ semid владелец права nsems
0x00000000 0 root 600 1
0x00000000 32769 root 600 1
0x00000000 1409027 4294967295 600 1
0x00000000 131076 4294967295 600 1
0x00000000 163845 4294967295 600 1
...
0x00000000 4817023 4294967295 600 1
Нужно очистить данные массивы семафоров, для этого создадим файл:
# cat sems.sh
#!/bin/bash
sems=$(ipcs -s | grep 4294967295 | awk --source '/0x0*.*[0-9]* .*/ {print $2}')
for sem in $sems
do
ipcrm sem $sem
done
В команде grep нужно указать значение третьей колонки (чистить семафоры root'a лучше не стоит).
Сделаем скрипт выполняемым:
# chmod +x sems.sh
И запустим его:
# ./sems.sh
ресурсы(ы) удален(ы)
...
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
ресурсы(ы) удален(ы)
Убедимся, что семафоры очищены:
# ipcs -s
------ Массивы семафоров --------
ключ semid владелец права nsems
0x00000000 0 root 600 1
0x00000000 32769 root 600 1
# ipcs -su
------ Состояние семафора --------
использовано массивов = 2
выделено семафоров = 2
И запустим Apache2:
# /etc/init.d/httpd start
Запускается httpd: [ OK ]
# /etc/init.d/httpd status
httpd (pid 24183) выполняется...
# ps aux | grep http
root 24183 0.4 0.2 275392 10516 ? Ss 04:26 0:00 /usr/sbin/httpd
apache 24185 0.7 0.2 375656 13136 ? S 04:26 0:00 /usr/sbin/httpd
apache 24186 0.7 0.2 375840 13200 ? S 04:26 0:00 /usr/sbin/httpd
apache 24187 0.7 0.2 373276 10768 ? S 04:26 0:00 /usr/sbin/httpd
apache 24188 0.7 0.2 373268 10752 ? S 04:26 0:00 /usr/sbin/httpd
apache 24189 0.7 0.2 373276 10768 ? S 04:26 0:00 /usr/sbin/httpd
apache 24190 0.7 0.2 373276 10772 ? S 04:26 0:00 /usr/sbin/httpd
apache 24191 0.0 0.1 275392 5952 ? S 04:26 0:00 /usr/sbin/httpd
apache 24192 0.0 0.1 275392 5952 ? S 04:26 0:00 /usr/sbin/httpd
root 24213 0.0 0.0 103256 904 pts/0 S+ 04:26 0:00 grep http
Посмотрим состояние массивов семафоров после запуска Apache2:
# ipcs -s
------ Массивы семафоров --------
ключ semid владелец права nsems
0x00000000 0 root 600 1
0x00000000 32769 root 600 1
0x00000000 5079042 apache 600 1
0x00000000 5111811 apache 600 1
# ipcs -su
------ Состояние семафора --------
использовано массивов = 4
выделено семафоров = 4
Как видим, Apache2 создал 2 массива семафоров для своей работы. Теперь становится ясно, почему не запускался Apache2, а не запускался он потому, что было доступен только 1 массив семафоров, а ему было необходимо 2.
Комментариев нет:
Отправить комментарий