Что такое семафоры и как они вызваны?

8

Недавно у меня появилась проблема с тем, что мой Apache завис и не мог быть перезапущен. Затем хостинговая компания сказала мне, что это связано с «семафорами», и прислала мне отрывок, с которым они решили проблему:

/usr/bin/ipcrm sem $(/usr/bin/ipcs -s | grep www-data | awk '{print$2}')

Теперь хорошо иметь команду для выполнения, которая решает мою проблему, но опять же, я понятия не имею, о чем это все.

Что такое семафоры и кто, черт возьми, их кладет, где они находятся и как они разбивают мой апач?

Я был бы очень рад за некоторые общие объяснения!

Markus
источник

Ответы:

9

Как уже говорили другие, семафоры являются IPC (структурами межпроцессного взаимодействия). Семафоры, как и все IPC, используются для взаимодействия различных процессов.

В основном это счетчики, которые создаются, доступны и уничтожаются с помощью специальных системных вызовов, таких как sempost (3), semwait (3), semget (2) и semop (2). Смотрите sem_overview (7) в системе Linux для краткого описания.

Определение общения здесь довольно примитивно. «Общаться» для семафоров означает чтение, увеличение или уменьшение счетчика с помощью системных / библиотечных вызовов, упомянутых выше.

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

Другая особенность заключается в том, что они создаются в общей памяти, что позволяет нескольким процессам получать к ним доступ.

Как они проявляются / создаются, так это то, что программы создают их с помощью semget (2). Например, при запуске Apache создает семафоры.

ipcs -l расскажет вам о системных ресурсах ipc.

Вы можете манипулировать некоторыми системными ограничениями семафора и ipc с помощью sysctl. Попробуйте sysctl kernel.semпросмотреть настройки, связанные с семпахором, через sysctl. Если вы хотите сохранить какие-либо изменения в sysctl, попробуйте внести их /etc/sysctl.conf.

Джейсон Тан
источник
4

Семафоры являются формой межпроцессного взаимодействия (ipc в ipcrm). Они предоставляются операционной системой, и разработчики Apache используют их для связи между различными процессами Apache. Они вряд ли являются причиной сбоя Apache, но они не выпускаются, когда происходит сбой, препятствуя запуску новых экземпляров Apache.

Википедия: Семафор (программирование)

PGS
источник
Также есть тема на StackOverflow: stackoverflow.com/questions/34519/what-is-a-semaphore
Джеймс Снерингер
В вашем URL-адресе есть ошибка. В URL-адресе отсутствует правильное значение) Похоже, что это ошибка в программном обеспечении Serverfault ...
tegbains
grumble Получает URL прямо в окне предварительного просмотра и сбрасывает), когда я его сохраняю.
pgs
Пока спасибо. Но что они, как они проявляются? Это файлы, записи в журнале? Какое отношение они имеют к памяти? Могут ли они быть вызваны плохим программированием php (как мне сказала моя хостинговая компания)?
Маркус
Они являются общей памятью и структурами ядра. PHP не является потокобезопасным, поэтому вы должны использовать модуль предварительной обработки Apache2.
pgs