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
存在しません(参照:提案)。