我已經爲我正在使用的數據庫基礎結構編寫了多線程壓力測試,並且我正在嘗試使用callgrind對其進行配置。該程序完全在valgrind之外執行,並提供預期的結果。如何確定爲什麼valgrind/callgrind殺死進程
但是,在valgrind --tool=callgrind
下運行程序時,程序會執行很短的時間,然後停止,valgrind會在上次輸出到stdout時報告Killed
。
有沒有辦法讓我確定爲什麼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