Семафоры Apache и Zend Data Cache
Веб-сервер Apache и Zend Data Cache (На тарифных планах оптимизированных для Bitrix CMS) после не корректного завершения своей работы может не высвобождать из памяти свои сигнатуры семафоров, которые в последствии не дают серверу стартовать.
Если такая ошибка возникает как правило вместо вебстраниц веб сервер отдаёт пустые страницы
Как это можно диагностировать?
1) Нам понадобится shell доступ к VPS серверу, получить его можно руководствуясь статьёй:
Останавливаем Веб - Сервер Apache если он запущен:
# service httpd stop
3) Следующей командой проверим журналы:
# grep 'No space left\|ZSemaphoreImpl' /var/log/httpd/error_log*
попробуем найти записи похожие на:
[Wed Mar 25 12:34:45 2011] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
или
[Wed Mar 22 23:34:12 2011] [emerg] (28)No space left on device: Couldn't create accept lock (/var/lock/apache2/accept.lock. 34201)
или в случае установленного Zend Data Cache:
[26.07.2012 15:01:43 WARNING] ZSemaphoreImpl::constructor: failed to get semaphore id: File exists
24 18:31 zsemfile_RestartAgentSem052412182953OURCE_semid
Если в логах Мы нашли эти записи, то проверим ниличие свободного пространства командой :
# df -h /dev/vzfs
Filesystem Size Used Avail Use% Mounted on
/dev/vzfs 5.0G 494M 4.6G 10% /
4) Итак свободного пространства у нас достаточно, теперь посмотрим на память занятую семаформами следующей командой:
# ipcs -s
Вывод этой команды будет выглядеть примерно так :
------ Semaphore Arrays --------
key semid owner perms nsems
0x0003f73b 2121760768 apache 666 3
10x00000000 399507458 apache 600 1
40x73010002 589828 apache 660 1
10x00000000 1720844294 apache 600 1
10x00000000 1720909832 apache 600 1
5) И так мы выяснили, что Сервер Apache перед тем как отключиться действительно не очистил таблицы семафоров, очистить их можно следующей командой :
# for i in `ipcs -s | grep '[А,a]pache\|[B,b]itrix' | awk --source '/0x0*.*[0-9]* .*/ {print $2}'` ; do ipcrm -s ${i} ; done
Проверяем точку /tmp на наличие сигнатур Zend Data Cache
# ls -la /tmp/[Z,z]semfile*
Пример вывода если таковые есть:
-rw-r----- 1 apache apache 0 May 24 18:31 zsemfile_ConfigurationChangedEvent052412182953OURCE
-rw-r--r-- 1 apache apache 7 May 24 18:31 zsemfile_ConfigurationChangedEvent052412182953OURCE_semid
-rw-r----- 1 apache apache 0 May 24 18:31 zsemfile_RestartAgentSem052412182953OURCE
Удаляем:
# rm -f /tmp/[Z,z]semfile*
Последним шагом мы стартуем апач :
# service httpd start