linux中core dump开启使用教程

一、什么是coredump

我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。

通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

二、cored dump开启

执行ulimit –c 检查是否开启core dump,若结果为0,则认为没有启用core dump文件的生成,需要打开core dump 。开启core dump的方法有三种,一种是临时启用,两种是永久启用。

临时启用

方法1(ulimit命令法)

执行如下命令:

ulimit -c 1024

ulimit -c unlimited
上例中,前一种是限制core dump的文件大小不超过1024K,后一种是不限制core dump文件的大小,现在的程序占用内存都比较凶猛,以前写C程序需要计算内存的时代已经过去了。如果不加限制,可能一个core文件,几个G就出去了。所以最好还是限制该在小。

永久启用的两个方法:

方法二(profile文件修改法)

打开/etc/profile文件,增加如下以下并生使其生效:

ulimit -S -c unlimited > /dev/null 2>&1
注:如果该文件有ulimit -S -c 0 > /dev/null 2>&1 一行,需要先将该行注释掉。设置完成后通过执行 source /etc/profile 生效。

方法三(修改/etc/security/limits.conf文件)

找到【* soft core 0】行,将其修改为如下内容:

 代码如下 复制代码
user soft core 1024
或@group soft core 1024

这个方法可以针对指定用户或用户组打开core dump,如设置成【* soft core 10485760】,即core dump文件大小是10G 。

需要注意的是此处的设置和方法二中的设置是冲突的,在其中一处设置即可,此处建议用第三种方法设置,因为其可以针对不同的用户和组进行设置,更加灵活。

注:上面三种方法设置都不需重启机器,需要做的是退出终端并重新连接,重启需要core dump的程序即可。

三、修改core dump文件格式

定制core的路径,名称格式,通过修改下面两个配置:

 代码如下 复制代码

echo 1 >/proc/sys/kernel/core_uses_pid
echo '/corefiles/core-%e-%p-%t' > /proc/sys/kernel/core_pattern
这里先说下后一参数的配置说明:

%% 单个%字符
%p 所dump进程的进程ID
%u 所dump进程的实际用户ID
%g 所dump进程的实际组ID
%s 导致本次core dump的信号
%t core dump的时间 (由1970年1月1日计起的秒数)
%h 主机名
%e 程序文件名

再说下第一句配置,/proc/sys/kernel/core_uses_pid 如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

需要注意的是,由于/proc下的配置是即时生效的,reboot后,之前的配置就会失效。所以可以增加如下配置到/etc/sysctl.conf文件中,如下:

 代码如下 复制代码
kernel.core_uses_pid = 1
kernel.core_pattern = /corefiles/core-%e-%p-%t

保存后,执行sysctl -p生效。

注:需要注意的是,上面配置的corefiles该目录必须有写权限,否则无法生成core dump文件,可以通过下面的命令创建:

 代码如下 复制代码

# mkdir /corefiles
# chmod 777 /corefiles

时间: 2024-11-08 20:26:34

linux中core dump开启使用教程的相关文章

linux中Zabbix安装配置图文教程

说明: 操作系统:CentOS IP地址:192.168.21.127 Web环境:Nginx+MySQL+PHP zabbix版本:Zabbix 2.2 LTS 备注:Linux下安装zabbix需要有LAMP或者LNMP运行环境   安装篇 一.创建.导入zabbix数据库 cd /usr/local/src #进入软件包下载目录 tar zxvf zabbix-2.2.6.tar.gz #解压 cd /usr/local/src/zabbix-2.2.6/database/mysql #进

linux中Shadowsocks-Go Mu 安装配置教程

安装前配置 还是老样子,那就是各种支持库的安装.   Debian apt-get update apt-get install -y redis-server git CentOS yum install -y redis-server git 安装GO环境 Ubuntu/Debian – 安装配置Golang           安装教程:https://www.bxl.me/9531.html CentOS 6 – 安装配置Go语言                   安装教程:https

Linux中的syslog 入门学习教程

syslog是linux系统中默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件.程序.守护进程和内核提供了访问系统的日志信息.任何希望生成日志信息的程序都可以向syslog接口呼叫产生该信息. 几乎所有的网络设备都可以通过syslog协议,将日志信息通过udp方式传送到远端的服务器,而远端的服务器通过syslogd监听udp的514端口,并且根据syslog.conf配置文件中的配置进行处理,接受访问系统的日志信息,把指定的事件写入到特定的文件中,供后台数据库

linux中Shell命令用法入门教程

什么时候使用Shell 因为Shell似乎是各UNIX系统之间通用的功能,并且经过了POSIX的标准化.因此,Shell脚本只要"用心写"一次,即可应用到很多系统上.因此,之所以要使用Shell脚本是基于:     简单性:Shell是一个高级语言:通过它,你可以简洁地表达复杂的操作.     可移植性:使用POSIX所定义的功能,可以做到脚本无须修改就可在不同的系统上执行.     开发容易:可以在短时间内完成一个功能强大又妤用的脚本. 但是,考虑到Shell脚本的命令限制和效率问题

Linux中VPS 服务器安全设置教程

在开通了 Linux 系统的 VPS 或服务器后,我们有必要做一些基本的安全设置. 一.关闭 SSH 密码登陆 首先,你需要有自己的 SSH Key,如果你使用 Windows 系统,可以用 Putty 下的 PUTTYGEN.EXE 生成私匙和公匙. 第一步,运行 PUTTYGEN.EXE 一般,我们选择默认的 RSA 加密即可,默认的 1024 位加密足够用,如果要保险点,可以选择 2048 或 4096 位加密,如图红圈处: 第二步,点击 Generate ,然后鼠标随意在空白处移动 等进

Linux中的netstat命令使用教程

  从整体上看,netstat的输出结果可以分为两个部分: 一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列.这些数字一般都应该是0.如果不是则表示软件包正在队列中堆积.这种情况只能在非常少的情况见到. 另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍). Proto显示

linux中rsync同步安装配置教程

rsync是类unix系统下的数据镜像备份工具--remote sync.是一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步. 通过搭建rsync服务端和客户端,可轻松解决开发中遇到的测试环境与生产环境的文件同步问题,且同步过程完全自动化,避免了人工上传文件容易出现的错传或漏传现象. 下面我们一起来看一下设置的过程. 生产环境主机(rsync服务端)设置 1.配置rsyncd.conf文件 vi /etc/rsyncd.conf 设置如下

Linux中ClusterShell安装与配置教程

ClusterShell的安装与配置 ClusterShell的安装很Easy,如果使用APT或YUM包管理方式的话,基本就是一条命令的事儿,我就不说了,这里说一下如何从源代码安装,需要在源代码目录执行如下命令:  代码如下 复制代码 shell> python setup.py install 为了使用的方便,还需要拷贝配置文件到指定目录:  代码如下 复制代码 shell> mkdir /etc/clustershell shell> cp conf/* /etc/clustersh

linux中ntp安全漏洞修复教程

CVE-2013-5211漏洞说明: CVE-2013-5211最早公布是2014年1月10日,由于NTP本身不会验证发送者的源ip地址.这就类似于DNS解析器使用的DRDoS(分布式反射型拒绝服务攻击).攻击者HACK发送了一个伪造报文发送给NTP服务器Server A,将数据包中的源ip地址改成了受害者Client A的ip地址.NTP服务器Server A会响应这个请求,相对于初始请求,响应包发送的字节数是一个被放大的量,导致受害者Client A被dos攻击.最高的两个消息类型:REQ_