MongoDB管理: 如何让mongod产生core文件?-阿里云开发者社区

开发者社区> 阿里云数据库> 正文
登录阅读全文

MongoDB管理: 如何让mongod产生core文件?

简介: 3.0+版本的mongod捕获了SIGSEGV信号,打印当前的执行堆栈,然后退出。 // src/mongo/util/signal_handlers_synchronous.cpp struct sigaction addrSignals; memset(&addrSignals, 0, s

3.0+版本的mongod捕获了SIGSEGV信号,打印当前的执行堆栈,然后退出。


// src/mongo/util/signal_handlers_synchronous.cpp
struct sigaction addrSignals;
memset(&addrSignals, 0, sizeof(addrSignals));
addrSignals.sa_sigaction = abruptQuitWithAddrSignal;
sigemptyset(&addrSignals.sa_mask);
addrSignals.sa_flags = SA_SIGINFO;

invariant(sigaction(SIGSEGV, &addrSignals, nullptr) == 0);
invariant(sigaction(SIGBUS, &addrSignals, nullptr) == 0);
invariant(sigaction(SIGILL, &addrSignals, nullptr) == 0);
invariant(sigaction(SIGFPE, &addrSignals, nullptr) == 0);

当mongod因为段错误退出时,查问题信息太少,非常不方便,故尝试让mongod在段错误时coredump,将给SIGSEGV设置处理函数的代码去掉。

+ //invariant(sigaction(SIGSEGV, &addrSignals, nullptr) == 0);

在进程启动后,增加如下代码,以产生SIGSEGV信号

 char *p = 0;
 *p = 100;
 

然而,进程启动后,进程的确异常退出了,但并没有产生core文件

[7330651.261707] mongod-9552[34304]: segfault at 0 ip 0000000000b24f27 sp 00007f2e6e718ae0 error 6 in mongod-9552[400000+1b52000]

查看core文件相关配置,都正常

  ulimit -c
  unlimited

  $cat /proc/sys/kernel/core_pattern
  core

mongod是后台启动的(processManagement.fork参数设置为true),而且代码里也没有再setrlimit来修改core file size。

将processManagement.fork参数设置为false后启动mongod,mongod能产生出core文件。可以确定processManagement.fork设置为true时不产生core文件的原因。


细看fork相关代码,发现fork()后,mongod调用chdir("/")将进程工作目录修改为了根目录,而根据 /proc/sys/kernel/core_pattern的配置,core文件要存储到工作目录,而mongod以普通用户启动,并没有根目录的写权限,故而没有产生core文件。

echo /tmp/corefiles/core > /proc/sys/kernel/core_pattern

修改core存储路径后,mongod能正常产生core文件。很多daemon模式启动的进程都会将工作目录改到根目录,故如果需要产生core文件,建议要正确设置好/proc/sys/kernel/core_pattern。


故要想mongod能在SIGSEGV信号时产生core文件,需要

  1. 让SIGSEGV的处理函数保持不变
  2. ulimit -c 设置好core文件大小限制
  3. 设置好/proc/sys/kernel/core_pattern,保证进程有权限存储core文件

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云数据库
使用钉钉扫一扫加入圈子
+ 订阅

帮用户承担一切数据库风险,给您何止是安心!

官方博客
最新文章
相关文章
链接