Linux core 文件

来源:互联网 发布:宅男客栈新域名亚洲 编辑:程序博客网 时间:2024/06/03 23:02

Linux core 文件介绍

1. core文件的简单介绍

在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。

2. 开启或关闭core文件的生成

用以下命令来阻止系统生成core文件:
ulimit -c 0
下面的命令可以检查生成core文件的选项是否打开:
ulimit -a
该命令将显示所有的用户定制,其中选项-a代表“all”。
也可以修改系统文件来调整core选项,可以通过/etc/security/limits.conf文件修改core文件选项。
说明各个列的含义
domain|type|item|value
root的配置
@root soft core unlimited
@root hard core unlimited
上述配置表示将core文件的soft限制跟hard限制同事更改为unlimited(即不限制大小)。若为0则表示关闭。
在开发过程中有时为了调试问题,还是需要在特定的用户环境下打开core文件产生的设置。在用户的~/.bash_profile里加上ulimit -c unlimited来让特定的用户可以产生core文件。如果ulimit -c 0 则也是禁止产生core文件,而ulimit -c 1024则限制产生的core文件的大小不能超过1024kb。

3. 设置Core Dump的核心转储文件目录和命名规则

/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e
可以这样修改:
echo “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名

4.Linux系统调用–getrlimit()与setrlimit()函数详解

在代码里,还可以通过 getrlimit()与setrlimit()来更改资源限制。该函数即可用来获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。

int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim);  

参数 resource可能的选择有 :
RLIMIT_AS 进程的最大虚内存空间,字节为单位。
RLIMIT_CORE 内核转存文件的最大长度。
RLIMIT_CPU 最大允许的CPU使用时间,秒为单位。
  当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。然而,可以捕捉信号,处理句柄可将控制返回给主程序。如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送 SIGKILL信号终止其执行。
RLIMIT_DATA 进程数据段的最大值。
RLIMIT_FSIZE 进程可建立的文件的最大长度。
  如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。
RLIMIT_LOCKS 进程可建立的锁和租赁的最大值。
RLIMIT_MEMLOCK 进程可锁定在内存中的最大数据量,字节为单位。
RLIMIT_MSGQUEUE 进程可为POSIX消息队列分配的最大字节数。 RLIMIT_NICE 进程可通过setpriority() 或 nice()调用设置的最大完美值。 RLIMIT_NOFILE 指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。
参数rlim是描述资源软硬限制的结构体,原型如下:
struct rlimit {
  rlim_t rlim_cur;
  rlim_t rlim_max;
}
返回说明:
  成功执行时,返回0。
  失败返回-1,errno被设为以下的某个值
   EFAULT:rlim指针指向的空间不可访问
   EINVAL:参数无效
   EPERM:增加资源限制值时,权能不允许

原创粉丝点击