崩溃后不会创建进程核心转储

时间:2014-10-18 06:43:26

标签: crash ubuntu-12.04 coredump

我已配置系统配置以创建进程核心转储。

以下是我的配置。

/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

以下是我要遵循的步骤来生成流程coredump。

1)我重新启动了mysql服务并执行了命令&#34; kill -s SEGV <mysql_pid>&#34;然后我在/ var / core位置获得了核心转储文件。

2)然后我开始服务mysql说"/etc/init.d/mysql start""service mysql start"。现在,如果我给&#34; kill -s SEGV <mysql_pid>&#34;然后没有创建核心转储文件。

3)要再次获取崩溃文件,我必须重新启动mysql服务,然后才能提供&#34; kill -s SEGV <mysql_pid>&#34;我正在获取核心转储文件。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

首先,您可以通过运行以下命令验证是否已为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'以永久启用coredump。

如果您很幸运,那么您可以为当前shell启用coredump并使用其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脚本。