カスタムメイドのシングルサインオンを含めるワードプレスプラグインを作成しています。
再現できない問題がありますが、頻繁に発生します。ログインして別のページをクリックすると、このページがずっと読み込まれ続けることがあります。また、同じセッションからの他のすべてのリクエストは、この時点から停止します。Apacheを再起動すると修正されますが、実際の解決策ではありません。
サーバーのトラフィックはそれほど多くないため、少数の apache プロセスのみが実行されています。それらを掘り下げると、多くの人が立ち往生していることがわかりますsemop
:
(gdb) bt
#0 0x00002af60c22b2d7 in semop () from /lib64/libc.so.6
#1 0x00002af60bbf612c in ?? () from /usr/lib64/libapr-1.so.0
#2 0x000055555559e614 in ?? () from /usr/sbin/httpd2-prefork
#3 0x000055555559e9ea in ?? () from /usr/sbin/httpd2-prefork
#4 0x000055555559f25d in ap_mpm_run () from /usr/sbin/httpd2-prefork
#5 0x000055555557a080 in main () from /usr/sbin/httpd2-prefork
彼らはファイルを待っているようです:
strace -p 3069
....
read(7, 0x7fff16a04df7, 1) = -1 EAGAIN (Resource temporarily unavailable)
semop(286162952, 0x2af60bd07dc0, 1 <unfinished ...>
read(7 ,..)
パイプを指します:
# ls -la /proc/3069/fd/7
lr-x------ 1 root root 64 Nov 7 17:24 7 -> pipe:[157329520]
そのパイプは、すべての apache プロセスで使用されます。
# lsof | grep 157329520
httpd2-pr 2430 root 7r FIFO 0,5 157329520 pipe
httpd2-pr 2430 root 8w FIFO 0,5 157329520 pipe
httpd2-pr 3061 wwwrun 7r FIFO 0,5 157329520 pipe
httpd2-pr 3061 wwwrun 8w FIFO 0,5 157329520 pipe
...
問題とは関係ないかもしれませんが、これは何のパイプなのか気になります。
ここにいる人々は、結局のところサーバーの問題ではないと推測していますが、バックトレースで見たところ、PHP はまだ呼び出されていません。libphp5.so はまったくありません。
PHPコードを投稿して見てもらいたいのですが、どの部分かわかりません...私のスクリプトは、同じセッションで別のスクリプトへのcurl呼び出しを行います。多分これはある種のブロッキングを作成していますか?それともhttpsの問題でしょうか?
PHP なのか Apache なのかはわかりませんが、問題の鍵は、ここで apache が何をしているのかを理解することかもしれません。
これを修正またはデバッグする方法はありますか?