Семафоры Linux


Семафоры Linux — средство ОС для синхронизации потоков и процессов. На практике сталкиваться с этим понятием приходится, например, когда отказывается запускаться Apache



Семафоры Linux и что делать если они заканчиваются


О том, что закончились семафоры могут говорить такие записи в логах веб-сервера:


[Fri Jan 26 12:34:31.540156 2019] [core:emerg] pid 25695No space left on device: AH00023: Couldn't create the ssl-cache mutex
AH00016: Configuration Failed

No space left on device


Свободное место на диске при этом есть, по inode также есть запас. Apache при этом перестает работать и не запускается, а если запускается, то работает нестабильно.

Сколько семафоров используется можно посмотреть выполнив


ipcs -s | wc -l
1089

Можно просмотреть содержимое файла /proc/sys/kernel/sem и сравнить его с текущим значением в системе.





Пример вывода в консоли нагруженного веб-сервера на скриншоте:

Семафоры Linux



Что делать если достигнут лимит по семафорам в Linux


Значение можно увеличить, например до 10240


echo "250 256000 32 10240" > /proc/sys/kernel/sem


После завершения процесса (например, веб-сервера) семафоры могут продолжать существовать в открытом состоянии.

Семафоры можно почистить — например, для пользователя www-data, из-под него обычно запускаются процессы веб-сервера. Предварительно нужно завершить процессы пользователя, в случае с веб-сервером — выключить веб-сервер.

В цикле for:


for i in $(ipcs -s | grep 'www-data' | awk '{print $2}'); do ipcrm -s "$i"; done


Разово только для определенного пользователя (www-data):


ipcs -s | grep www-data | awk '{ print $2 }' | xargs -n1 ipcrm sem


Или можно добавить параметры в /etc/sysctl.conf

kernel.msgmni = 512 kernel.sem = 250 128000 32 10240


Если меняется /etc/sysctl.conf, то нужно перезагрузить машину или выполнить

sysctl -p


Читайте также про файловые дескрипторы и принципы диагностики неполадок на уровне системы.


Подробную информацию про семафоры в Linux можно найти выполнив в консоли сервера man sem_overview.

man sem_overview



То же описание доступно по ссылке.

Сказать спасибо