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

GDB自杀(突然杀死调试过的进程),gdb,Gdb,我正在通过GDB(版本7.12,Ubuntu 14.04)运行一个非常大的应用程序(二进制有2GB,主要是因为调试符号),因此我可以捕获所有崩溃,并有完整的回溯+核心转储: ulimit-c unlimited 崩溃后,bt/bt full/info thread/generate core file 然而,我很少看到一些奇怪的行为:应用程序立即关闭,程序终止,信号为SIGKILL,Killed。在日志中,但是我100%肯定系统中没有其他东西会杀死它,对此负责的人是GDB。发生这种情况时,它不会

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

然而,我很少看到一些奇怪的行为:应用程序立即关闭,程序终止,信号为SIGKILL,Killed。在日志中,但是我100%肯定系统中没有其他东西会杀死它,对此负责的人是GDB。发生这种情况时,它不会生成任何回溯/coredump/etc

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

如何调试这种情况

二进制文件有2GB

您可能内存不足,并且您的应用程序可能已被OOM杀手杀死。要确认这一点,请查看
oom killer
Killed process
消息的
dmesg
输出

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

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


这可能是个杀手。查看
dmesg
输出,获得如下内容:
内存不足:Kill进程
。你是对的,检查了dmesg日志,我发现
ps调用的oom killer:gfp\u mask=0x1042d0,order=2,oom\u score\u adj=0
内存不足:Kill进程8057(我的二进制名称在这里)每次都得909分或牺牲孩子。添加一个单独的答案,以便我可以接受它。与此同时,你有没有想过为什么互换会是空的?我本以为在这种情况下它会满的。或者可能是同一个过程的记忆…谢谢。我永远也想不到这一点,因为我的眼里充满了愤怒的泪水。
   /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.