GDB自杀(突然杀死调试过程)

时间:2017-07-06 16:25:01

标签: gdb

我通过GDB(版本7.12,Ubuntu 14.04)运行一个非常大的应用程序(二进制文件有2GB,主要是因为调试符号)所以我可以捕获所有崩溃并有完整的回溯+ coredumps: ulimit -c unlimited 崩溃后bt / bt full / info thread / generate-core-file

但是,很少我会遇到一些奇怪的行为:应用程序会立即在日志中以Program terminated with signal SIGKILL, Killed.关闭,但是我100%肯定没有其他任何系统杀死它,负责人就是GDB。发生这种情况时,它不会生成任何回溯/ coredump / etc.

据我所知,直到现在,这发生在大(1天)的正常运行时间。每当正常崩溃发生在~1天正常运行时(我不是在讨论杀戮情况,而是正常崩溃)并且GDB生成回溯+ coredump,则coredump大小为~100GB。所以现在唯一要假设的是GDB消耗太多内存来处理它。不幸的是,当发生这种情况时我不知道确切的内存使用情况(因为它是意外的),但交换文件几乎是空的,这很可能意味着它没有真正用完内存。 / p>

关于如何调试这种情况的想法?

1 个答案:

答案 0 :(得分:1)

  

二进制有2GB

你可能内存不足,你的应用很可能被OOM杀手杀死了。要确认这一点,请查看dmesgoom-killer消息的Killed process输出。

  

但是交换文件几乎是空的,这很可能意味着它没有   真的用完了内存

这取决于proc中的vm.swappiness值。尝试增加此参数以增加内核交换内存页面的积极程度。见man proc

   /proc/sys/vm/swappiness
          The value in this file controls how aggressively the kernel
          will swap memory pages.  Higher values increase
          aggressiveness, lower values decrease aggressiveness.  The
          default value is 60.