私が作業しているデータベースインフラストラクチャのマルチスレッドストレステストを書いており、callgrindを使用してプロファイリングしようとしています。プログラムはvalgrindの外で完全に実行され、期待される結果が得られます。valgrind/callgrindがプロセスをkillする理由を調べる方法
valgrind --tool=callgrind
の下で実行すると、valgrindレポートKilled
がstdoutに最後に出力されるので、プログラムは短時間実行されて停止します。
なぜvalgrindが私の仕事を殺したのかを判断する方法はありますか?博士のアドバイスに従った後
:それはvalgrind --tool=none
で殺されない、しかし、私は私が与えられてきたメッセージを分析する方法が全くわからないんだけど、私のスレッドでsigvgkill
信号の多くがあるように思われます。私の知る限り
--13713:1:syswrap- run_a_thread_NORETURN(tid=104): pre-thread_wrapper
--> [pre-success] Success(0x0:0x365c)--13713:1:syswrap- thread_wrapper(tid=104): entry
SYSCALL[13713,104](311) sys_set_robust_list (0x4f213be0, 12)[sync] --> Success(0x0:0x0)
SYSCALL[13713,104](240) sys_futex (0xbeaf348, 128, 2, 0x0, 0x0) --> [async] ...
--13713-- async signal handler: signal=13, tid=32, si_code=0
--13713-- interrupted_syscall: tid=32, ip=0x380b197c, restart=False, sres.isErr=True, sres.val=32
--13713-- completed, but uncommitted: committing
--13713:1:gdbsrv VG core calling VG_(gdbserver_report_signal) vki_nr 13 SIGPIPE gdb_nr 13 SIGPIPE tid 32
--13713:1:gdbsrv not connected => pass
--13713-- delivering signal 13 (SIGPIPE):0 to thread 32
--13713-- delivering 13 (code 0) to default handler; action: terminate
==13713==
あなたはそれがvalgrindから始まったと確信していますか?あるいは、あなたはメモリがなくなり、カーネルがそのプロセスを殺していますか? – pah
@threadp callgrindはかなりのメモリオーバーヘッドを追加しますか?私は自分のアプリケーションで多くのメモリを割り当てているわけではなく、通常はカーネルで実行する前にメモリが不足していることはありませんか?どのように私はこれを決定するだろうか? –
強制終了後に 'dmesg'出力を確認してください。これは問題になる可能性は低いですが、可能性もあります。 – pah