我已配置系统配置以创建进程核心转储。
以下是我的配置。
/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;我正在获取核心转储文件。
任何人都可以帮我解决这个问题吗?
答案 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脚本。