1.系统环境:
centos 7.2
2. 开启应用程序coredump:
- 第一种方法,直接改配置文件,重启系统后仍然生效
#vim /etc/security/limits.conf
* soft core unlimited
- 第二种方法,把修改core file限制的命令加到启动配置文件里
#echo "ulimit -c unlimited" > /etc/profile
- 第三种方法,使用资源限制命令,修改core 文件大小为unlimited,它其实改的是shell的进程的资源限制,需要重启目标进程,而且重启后失效
#ulimit -c unlimited
3. 修改coredump文件的保存路径
需要提前创建corefiles目录,否则找不到这个目录,就无法生成coredump文件
#mkdir /tmp/corefiles
只是在内存生效,重启系统失效
#echo "/tmp/corefiles/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern
找到kernel.core_uses_pid所在配置文件, 在其中加入这一行,”kernel.core_pattern = /tmp/corefiles/core.%e.%p.%t “ ,可以永久生效
#sysctl --system
core_pattern内核参数,是用来指定一个core dump文件的名字模板,名字的最大长度128字节,默认名字是core,可以加入以下%开头的模式字串:
%% 用来输出一个 '%'符号
%p 正在生成core dump的进程pid
%P global pid (init PID namespace)
%i 在多线程环境中,发生异常的线程tid
%I global tid (init PID namespace)
%u 正在生成core dump的进程uid
%g 正在生成core dump的进程gid
%s 触发进程生成core dump的信号量
%t core dump发生时,把当时的时间作为文件名的一部分
%h core dump发生时,把所在主机的主机名作为文件名的一部分
%e 可执行文件的文件名
%E 文件路径
另外,可以使用管道模式,如kernel.core_pattern ="|/xx/xx/xx",把core dump数据输出到另一个程序
重启系统后,可以检查是否生效
#sysctl kernel.core_pattern
4.通过强杀一个进程产生一个coredump文件
#kill -s SIGSEGV pid