Linuxを使用すると、2.6.30-gentoo-r4
非常に複雑なコード システムが実行され (4.4.9-pl0-gentoo および 5.2.10-pl0-gentoo を使用)、セマフォ ブロッキングの問題が発生することがあります。関数php
の呼び出しがブロックされ、最終的にシステムがクラッシュします。php
sem_acquire
しかし、問題のセマフォは別のプロセスによってブロックされていないようで、さらに調査することにしました。問題のプロセスを特定し、セマフォをブロックする原因をphp
特定できました。php
strace
....
09:03:25 gettimeofday({1415696605, 778078}, NULL) = 0
09:03:25 close(5) = 0
09:03:25 gettimeofday({1415696605, 778483}, NULL) = 0
09:03:25 gettimeofday({1415696605, 778708}, NULL) = 0
09:03:25 semop(0, 0xbf8f1692, 1 <unfinished ...>
この特定の出力は、 ( の 2 番目の引数)semop(0, 0xbf8f1692, 1)
の内容が見えないため、あまり役に立ちません。おそらく、他の誰かがこの呼び出しで直接問題に気付いているのでしょうか?struct sembuf
semop
semop
とにかく、私は調査を続けて、アドレスのメモリをチェックしました0xbf8f1692
(ルートとして):
> gdb --pid 1236
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i586-pc-linux-gnu".
Attaching to process 1236
ptrace: Operation not permitted.
(gdb) dump memory /root/output 0xbf8f1692 0xbf9f1692
(gdb) quit
> hexdump -C output
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00100000
これは、ゼロの束を指すsemop
で が呼び出されることを意味しますかstruct sembuf
? または、 の引数が何であるかを確認するためにメモリを見つける際に何か間違ったことをしましたかsemop
? その呼び出しで何が起こっているかを確認する別の方法はありますかsemop
?
追加情報:
- Linux システムはコマンド
prctl
も も認識しませんptrace
。 - ディレクトリ名
/proc/sys/kernel/yama
が存在しません(提案情報)。