我已经配置了系统配置来创建进程核心转储。
以下是我的配置。
/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脚本。