如何查询和修改Linux *** 作系统生成core dump文件的默认路径?

如何查询和修改Linux *** 作系统生成core dump文件的默认路径?,第1张

经过分析发现系统默认的core文件生成路径是/var/logs,但/var/logs目录并非系统自带的,系统初始安装默认自带的是/var/log,最终导致该系统出现core dump后并没能生成core文件,因此如何查询和修改系统默认的core dump文件生产路径呢?

方法如下:一. 查询core dump文件路径:

方法1: # cat /proc/sys/kerne怠珐糙貉孬股茬瘫长凯l/core_pattern。

方法2: # /sbin/sysctl kernel.core_pattern二. 修改core dump文件路径:

方法1:临时修改/proc/sys/kernel/core_pattern文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。 /proc/sys/kernel/core_pattern 例:echo ‘/var/log/%e.core.%p’ >/proc/sys/kernel/core_pattern

方法2:永久修改:使戚睁辩用sysctl -w name=value命令。 例:高缺/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命早敬名: %% 单个%字符。

在linux平台下,设置core dump文件生成的方法:

1 )如何生成 coredump 文件

登陆 LINUX 服务器,任意位置键入

echo "ulimit -c 1024" >>/etc/profile

退出 LINUX 重新登陆 LINUX

键入 ulimit -c

如果显示 1024 那么说明 coredump 已经被开启。

1024 限制产生的 core 文件的大小不能超过 1024kb,可以使用参数unlimited,取消该限制

ulimit -c unlimited

2 ) . core 文件的简单介绍

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

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

用以下命令来阻止系统生成 core 文件 :

ulimit -c 0

下面的命令可以检查生成 core 文件的选项是否打开 :

ulimit -a

该命令将显示所有的用户定制,其中选项 -a 代表“ all ”。

也可以修改系统文件来调整 core 选项

在 /etc/profile 通常会有这样一句话来禁止产生 core 文件,通常这种设置是合理的 :

# No core files by default

ulimit -S -c 0 >/dev/null 2>&1

但是在开发过程中有时为了调试问题,还是需要在特定的用户环境下打开 core 文件产生的设置。

在用户的 ~/.bash_profile 里加上 ulimit -c unlimited 来让特定的用户可以产生 core 文件。

如果 ulimit -c 0 则也是禁止产生 core 文件,而 ulimit -c 1024 则限制产生的 core 文件的大小不能超过 1024kb

4 ) . 设置 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" >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 添加命令名

6 ) . 一个小方法来测试产生 core 文件

直接输入指令 :

kill -s SIGSEGV $$

发生coredump一般都是在进掘闹程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用 kill -l 命令全部列出来。

针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式, 默认处理是coredump的信号如下:旁仿

3)SIGQUIT 4)SIGILL6)SIGABRT 8)SIGFPE11)SIGSEGV7)SIGBUS31)SIGSYS

5)SIGTRAP 24)SIGXCPU 25)SIGXFSZ 29)SIGIOT

我们看到SIGSEGV在其中,一般数组越界或是访问空指针都会产生这个信号。另外虽然默认是这样的,但是你也可以写自己的信号处理函数改变默认行为。

上述内容只是产生coredump的必要条件,而非充分条件。要产生core文件还依赖于程序运行的shell,可以通过ulimit -a命令查看

Linux dump命令用于备份文件系统。

dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。

语法:

dump[-cnu][-0123456789][-b

<区块大小>][-B<区块数目>][-d<密度>][-f<设备名称>][-h<层级>][-s<磁带长度>][-T<日期>][目录或文件系统]或dump[-wW]

参数:

-0123456789 备份的层级

-b<区块大小>指定区块的大小,单位为KB

-B<区块数目>指定备份卷册的区块数目

-c 修改备份磁带预设的密度与容量

-d<密度>设置磁带的密度,单位为BPI

-f<设备名称>指定备份设备

-h<层级>当备份层明腔敏级等于或大于指定的层级时,将不备份用户标示为nodump的文件

-n 当备份工作需要管理员介入时,激枝向所有operator群组中的使用者发出通知

-s<磁带长度>备份磁带的长度,单位为英尺

-T<日期>指定开始备份的时间与日期

-u 备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等

-w 与-W类似,但仅显示需要备份的文件

-W 显示需要备份的文件及其圆指最后一次备份的层级,时间与日期。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12497839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存