崩溃后未创建进程核心转储
Posted
技术标签:
【中文标题】崩溃后未创建进程核心转储【英文标题】:Process Core dumps are not created after crash 【发布时间】:2014-10-18 06:43:26 【问题描述】:我已配置系统配置以创建进程核心转储。
以下是我的配置。
/etc/sysctl.conf
kernel.core_uses_pid = 1
kernel.core_pattern = /var/core/core.%e.%p.%h.%t
fs.suid_dumpable = 2
/etc/security/limits.conf
* soft core unlimited
root soft core unlimited
这是我生成进程核心转储的步骤。
1) 我已经重启了mysql服务并执行了命令“kill -s SEGV <mysql_pid>
”然后我在/var/core位置得到了核心转储文件。
2) 然后我已经启动了我的服务mysql说"/etc/init.d/mysql start"
或"service mysql start"
。现在,如果我给出“kill -s SEGV <mysql_pid>
”,则不会创建核心转储文件。
3) 要再次获取崩溃文件,我必须重新启动 mysql 服务,然后只有当我给出“kill -s SEGV <mysql_pid>
”时,我才能获取核心转储文件。
谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:首先,您可以通过运行以下命令来验证 MySQL 进程是否禁用了核心转储:
# cat /proc/`pidof -s mysqld`/limits|egrep '(Limit|core)'
Limit Soft Limit Hard Limit Units
Max core file size 0 unlimited bytes
“软”限制是要查找的限制,在这种情况下为零表示禁用核心转储。
在 /etc/security/limits.conf 中默认设置的限制仅适用于交互式启动的程序。您可能必须在 mysqld 启动脚本中包含“ulimit -c unlimited”才能永久启用核心转储。
如果你幸运的话,你可以为你当前的 shell 启用 coredumps 并使用它的 init.d 脚本重新启动守护进程:
# ulimit -c unlimited
# /etc/init.d/mysql restart
* Stopping MySQL database server mysqld [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Checking for tables which need an upgrade, are corrupt
or were not closed cleanly.
# cat /proc/`pidof -s mysqld`/limits|egrep '(Limit|core)'
Limit Soft Limit Hard Limit Units
Max core file size unlimited unlimited bytes
如您所见,这适用于我系统上的 MySQL。
请注意,这不适用于像 Apache 这样在内部调用 ulimit 以禁用核心转储的应用程序,不适用于使用 upstart 的 init.d 脚本。
【讨论】:
以上是关于崩溃后未创建进程核心转储的主要内容,如果未能解决你的问题,请参考以下文章