IT技术博客大学习 共学习 共进步

获取 MySQL 崩溃时的 core file

神仙的仙居 2016-03-21 13:56:01 浏览 2,762 次

   对于一般进程,要让进程崩溃时能生成 core file 用于调试,只需要设置 rlimit 的 core file size > 0 即可。比如,用在 ulimit -c unlimited 时启动程序。

   对 MySQL 来说,由于 core file 中会包含表空间的数据,所以默认情况下为了安全,mysqld 捕获了 SEGV 等信号,崩溃时并不会生成 core file,需要在 my.cnf 或启动参数中加上 core-file。

   但是即使做到了以上两点,在 mysqld crash 时还是可能无法 core dump。还有一些系统参数会影响 core dump。以下脚本可供参考:

echo 2 >/proc/sys/fs/suid_dumpable
chmod 0777 /var/crash
echo /var/crash/core> /proc/sys/kernel/core_pattern
echo 1 >/proc/sys/kernel/core_uses_pid

   由于 mysql 通常会以 suid 方式启动,所以需要打开 suid_dumpable 。对于 core_pattern,最好指定一个保证可写的绝对路径。

   之后,就可以用 kill -SEGV 让 mysqld 崩溃,测试一下能不能正常产生 core file 了。

建议继续学习

  1. 深入理解Nginx之调试优化技巧 (阅读 8,104)
  2. 又一个PHP低概率Core的分析(PHP内存管理) (阅读 4,262)
  3. CSS让你的IE浏览器崩溃 (阅读 4,066)
  4. 怎样用core文件调试你的linux程序? (阅读 3,885)
  5. CSS让你的IE浏览器崩溃(Crash your IE) (阅读 3,645)
  6. 如何调试PHP的Core之获取基本信息 (阅读 3,405)
  7. PHP stream未能及时清理现场导致Core的bug (阅读 3,283)
  8. 更简单的重现PHP Core的调用栈 (阅读 3,045)
  9. iOS安全–不同平台的崩溃收集 (阅读 1,961)