崩溃后不会创建Process Core转储



我已经配置了系统配置来创建进程核心转储。

以下是我的配置。

/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>"时,我才能获得核心转储文件

有人能帮我解决这个问题吗?

首先,您可以通过运行来验证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"才能永久启用coredumps。

如果幸运的话,那么您可以为当前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脚本。

相关内容

  • 没有找到相关文章

最新更新