美文网首页
记一次程序coredump定位

记一次程序coredump定位

作者: 中山浪子 | 来源:发表于2019-07-27 17:52 被阅读0次

问题背景

最近在做pika的新存储引擎BlobKV开发,所谓的BlobKV就是将key和value分开存储,目的是解决大value情况下,rocksdb compaction导致的写放大问题。由于新的存储引擎和旧的存储引擎在数据格式上的不兼容,所以需要将旧的存储引擎数据通过命令的形式迁移到新的存储引擎上。

问题现象

迁移工具比较简单,流程就是先在源端执行Bgsave,生成数据库的备份dump,然后开启五个线程对五种数据类型的数据库扫描key并且将key分发到多个迁移线程中,由迁移线程发送給对端。
问题是,在数据量较大时,每次都是迁移到一定的数据量,迁移程序就会自动退出,并且没有打印任何退出前的日志:-(

问题定位

  1. 程序非正常退出,首先想到的是看有没有生成coredump文件,查看了下,没有生成coredump文件。
  2. 然后查看系统的dmesg,发现一个迁移线程退出的日志,分配内存失败,原因是free内存太少,于是释放了系统的页缓存。重新迁移,发现还是会自动退出,但demsg中已经没有错误日志了,所以也排除了OOM杀死进程。
  3. 继续查看系统的messages日志,执行cat /var/log/messages,发现也是没有任何信息
  4. 再看迁移程序中的日志,也没有发现任何ERROR日志(迁移程序非正常退出时候都会打印ERROR日志)
  5. 程序就这样死的一点遗言都没有,很是绝望。但仔细想想,既然程序不是主动退出,那肯定是被系统杀死的,系统怎么杀死进程呢?--发信号量啊。于是抱着最后一根救命稻草,我在程序里捕获了所有信号量(31个系统经常发的信号)。

终于,凶手抓住了!! 系统給迁移进程发了一个SIGPIPE信号,该信号的意思是“管道破损,没有读端的管道写数据”,也就是说对端将迁移线程的连接給断开了,此时发送线程在写一个不可读的管道,导致程序退出....

问题解决

  1. 迁移程序忽略SIGPIPE信号
  2. 将对端连接超时断开的时间从60s改成了600s
  3. 迁移线程发送失败后,尝试重新连接,而不是直接退出

问题思考

  1. 对端为什么会将迁移线程的连接断开,按理说迁移线程一直在发送数据,不可能是在非活跃状态。(需要进一步调查)
  2. 在写socket程序时记得要忽略SIGPIPE信号量

相关文章

  • 记一次程序coredump定位

    问题背景 最近在做pika的新存储引擎BlobKV开发,所谓的BlobKV就是将key和value分开存储,目的是...

  • Android环境中借助GDB和coredump定位Native

    coredump是linux中定位程序异常退出的机制(Android基于Linux内核,所以coredump机制在...

  • 《x86汇编语言:从实模式到保护模式》读书笔记

    书籍简介 阅读目的 本意是为了调试coredump时候,通过寄存器、汇编命令定位产生coredump原因。了解常见...

  • coredump及调试

    什么是coredump? coredump是程序崩溃时的内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕...

  • linux下core dump (转)

    前言 第一次接触core dump,这篇文章介绍总结的特别好原文跳转 简而言之,coredump file 是程序...

  • 使用 gdb 恢复堆栈信息

    用 C/C++ 编写的程序, 如果遇到 Segmentation Fault 则可以通过生成 coredump 来...

  • Mac coredump文件

    简介: coredump是指当程序出错而异常中断时,OS会把程序工作的当前状态存储成一个coredunmp文件。 ...

  • go 程序生成 coredump 文件

    开启core文件功能 设置core文件限制大小使用 ulimit -c 可以查看core文件限制大小,一般来说,默...

  • addr2line命令

    在Linux下写C/C++程序的程序员,时常与CoreDump相见。在内存越界访问,收到不能处理的信号,除零等错误...

  • dmesg和addr2line定位程序崩溃

    如果没有coredump文件,该如何找到程序哪一行挂掉了呢?可以用dmesg找到程序崩溃的地方。然后用addr2l...

网友评论

      本文标题:记一次程序coredump定位

      本文链接:https://www.haomeiwen.com/subject/zeberctx.html