セマフォとは何ですか?それらはどのようにして引き起こされますか?


8

最近、Apacheがクラッシュし、再起動できないという問題が発生し始めました。ホスティング会社は、それが「セマフォ」に関係していると私に言って、問題を解決するためにこれを省略して送った:

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

これで、問題を解決するコマンドを実行できるのは良いことですが、それでも、これが何なのかについての手がかりはありません。

セマフォとは何か、一体誰がそれらを置くのか、どこにあるのか、そしてどのようにして私のApacheをクラッシュさせるのか?

いくつかの一般的な説明を本当に嬉しく思います!

回答:


9

他の人が言ったように、セマフォはIPC(プロセス間通信構造)です。すべてのIPCのようなセマフォは、異なるプロセスが互いに通信できるようにするために使用されます。

これらは基本的に、sempost(3)、semwait(3)、semget(2)、semop(2)などの特別なシステムコールを使用して作成、アクセス、破棄されるカウンターです。簡単な説明については、Linuxシステムのsem_overview(7)を参照してください。

ここでのコミュニケーションの定義はかなり原始的です。セマフォの「通信」とは、上記のシステム/ライブラリ呼び出しを介してカウンタを読み取り、インクリメントまたはデクリメントすることを意味します。

セマフォについての特別な点は、セマフォが操作を実行できるのは一度に1つのプロセスのみであり、セマフォの操作はアトミックであることが保証されていることです。つまり、カーネルはセマフォ操作を実行しているプロセスをスワップアウトしないため、セマフォ。

他の特別なことは、それらが共有メモリに作成され、複数のプロセスがそれらにアクセスできるようにすることです。

それらがどのように現れる/作成されるかは、プログラムがsemget(2)を使用して作成することです。たとえば、apacheは実行時にsempahoreを作成します。

ipcs -lは、システムのIPCリソースについて通知します。

sysctlを使用して、いくつかのシステムセマフォとipc関連の制限を操作できます。sysctl kernel.semsysctlを介して、sempahore関連の設定を表示してみてください 。sysctlの変更を永続化したい場合は、それらをに入れてみてください/etc/sysctl.conf。


4

セマフォは、プロセス間通信の形式です(ipcrmのipc)。それらはオペレーティングシステムによって提供され、Apacheの開発者は異なるApacheプロセス間の通信にそれらを使用します。それらがApacheのクラッシュの原因である可能性は低いですが、クラッシュしてもリリースされないため、Apacheの新しいインスタンスを開始できません。

ウィキペディア:セマフォ(プログラミング)


StackOverflowの上にわたって対象のスレッドもあります:stackoverflow.com/questions/34519/what-is-a-semaphore
— ジェームズSneeringer

URLに誤りがあります。URLに正しいものがありません)Serverfaultソフトウェアのバグのようです...
— tegbains

grumble プレビューでURLを取得し、保存すると)をドロップします。
— PGS

今までありがとう。しかし、それらは何であり、どのように現れますか?それらはファイル、ログのエントリですか?彼らは記憶と何をしなければならないのですか?それらは、(私のホスティング会社が私に言ったように)悪いphpプログラミングによって引き起こされるのでしょうか?
— マーカス

それらは共有メモリとカーネル構造です。PHPはスレッドセーフではないため、Apache2のpreforkマルチプロセッシングモジュールを使用する必要があります。
— PGS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.