开源中文网

您的位置: 首页 > solaris > 正文

系统core文件和转储文件管理

来源:  作者:

core文件是系统软件出现问题后产生的信息记录。它对软件开发者和系统管理者的工作有很大的帮助作用。本节主要对Core文件产生和管理做一些初步介绍。

17.3.1 管理core文件概述
core文件在进程或者应用程序异常终止时产生。我们可以使用coreadm命令来管理core文件。比如,你可以使用coreadm命令来设定所有的core文件都放在一个目录中。这样,就会很容易通过测试找到问题的痕迹。

有两种类型的core文件:

单个进程的core文件,在默认情况下是启动的。当进程异常终止时,单个进程的core文件就在异常终止进程的目录中产生。产生后,单个进程的core文件的拥有者就是进程的拥有者。只有拥有者才能查看这个文件。

全局core文件,它默认的情况下是不开启的。如果启动了全局core文件,它产生在引起全局core文件产生的目录。全局core文件的拥有者就是超级用户。非特权用户不能查看全局core文件。

当进程异常终止时,默认在当前目录产生core文件。如果这时全局core文件路径也开启着,每个异常终止的进程就会有两个文件产生:一个在当前的工作目录;另一个在全局core文件目录。

默认时,setuid进程既不产生全局core文件也不产生单个core文件。

如果全局core文件是开启的,core文件可以用表17-3中的变量所描述。

表17-3 描述Core文件的变量

变 量 名
变量描述

%d
执行的文件目录名

%f
执行的文件名

%g
组的ID

%m
机器名称


续表

变 量 名
变量描述

%n
系统节点名

%p
进程ID

%t
十进制的时间

%u
有效的用户ID

%z
进程运行的分区(xone)名

%%
百分比


举例说明,全局core文件路径设置为:

/var/core/core.%f.%p

这时,如果sendmail的PID为12345的进程发生异常终止,将产生下列core文件:

/var/core/core.sendmail.12345

我们可以使用coreadm命令设定进程产生的core文件的目录和名称。这将取代原来的默认设置。

# coreadm -i /var/core/core.%f.%p

全局core的属性值存储在/etc/coreadm.conf文件中。

17.3.2 管理core文件的实例
1.显示当前core文件的设置
例17-2 使用不带任何参数的coreadm命令显示当前core的设置情况。

$ coreadm

global core file pattern:

global core file content: default

nit core file pattern: core

init core file content: default

global core dumps: disabled

per-process core dumps: enabled

global setid core dumps: disabled

per-process setid core dumps: disabled

global core dump logging: disabled

2.设置core文件名的样式
将当前Shell运行的所有进程所产生的core文件命名:

$ coreadm -p $HOME/corefiles/%f.%p $$

对全局文件设置core文件命名需要超级用户权限:

# coreadm -g /var/corefiles/%f.%p

3.启用单个进程core文件的路径
# coreadm -e process

$ coreadm $$

1180: /home/kryten/corefiles/%f.%p

4.启用全局core文件的路径
# coreadm -e global -g /var/core/core.%f.%p

17.3.3 查询core文件信息
一些proc工具可以像检测活动的进程一样检测core文件。比如,/usr/proc/bin/pstack、pmap、pldd、pflags和pcred工具能管理core文件。更详细的信息请查看porc(1)的帮助。

例17-3 使用proc工具检查core文件。

$ ./a.out

Segmentation Fault(coredump)

$ /usr/proc/bin/pstack ./core

core ’./core’ of 19305: ./a.out

000108c4 main (1, ffbef5cc, ffbef5d4, 20800, 0, 0) + 1c

00010880 _start (0, 0, 0, 0, 0, 0) + b8 
17.4 系统crash信息的管理
crash主要反馈主机能否正常运行等比较严重的问题。系统管理员需要特别关注crash信息。

17.4.1 系统崩溃概述
系统崩溃(crash)发生在硬件故障、I/O问题或软件错误的情况下。如果系统崩溃发生了,它将在控制台上显示错误信息,并将物理内存的拷贝写入转储设备。这时,系统将自动重新启动。当系统重启后,savecore 命令运行将数据从转储设备中找回,并存储到savecore目录。这些数据为系统诊断提供了依据。

系统崩溃转储文件
当savecore命令自动运行将崩溃信息从转储设备中找回,并写成两个文件:unix.X和vmcore.X。其中X为转储的次序号码。这些文件一起用于表现系统的崩溃转储信息。

崩溃转储文件存储在预先设定好的目录中,默认情况下是/var/crash/hostname。在以前的Solaris版本中,崩溃转储文件将在系统重新启动的时候不写在特定的目录,除非你手动启动,将内存的映像存储到崩溃转储文件中。不过现在就自动存储崩溃转储文件了。

dumpadm命令
我们可以用dumpadm命令来在Solaris系统中管理系统崩溃转储信息。

dumpadm命令能使你在操作系统上设置崩溃转储。这个命令的设置参数包括转储的内容、转储的设备和崩溃转储信息的存储路径。

转储数据是以压缩的形式被存在转储设备中的。内核的崩溃转储映像可能达到4GB,压缩数据就意味着更快的转储速度和更小的转储设备磁盘空间。

保存崩溃转储文件是在后台运行的崩溃转储文件的任务。系统启动的时候不需要等待savecore命令完成就可以进行下一步。当然,大的内存数量是有利于savecore完成任务的。

系统崩溃转储文件是由savecore命令产生的,保存一般也是按默认路径进行的。

savecore –L命令是新的属性,它使你能在系统运行的时候崩溃转储。当系统内存存储有问题的时候,这个命令试图在系统运行的时候调试内存的快照。如果系统是启动的,并且有些命令还能执行,你可以运行cavecore –L命令来存储系统转储设备的快照到崩溃转储目录。

通过dumpadm命令,转储设置参数存储在/etc/dumpadm.conf文件中。注意不要手动编辑这个文件,这样做可能会带来不一致的转储设置。

dumpadm命令如何工作
当系统启动的时候,dumpadm命令调用svc:/system/dumpadm:default服务来设置基于/etc/dumpadm.conf文件的的崩溃转储参数。

dumpadm命令通过/dev/dump接口来初始化转储设备和转储内容。

17.4.2 管理系统崩溃转储信息
在管理系统崩溃信息中,你必须要记住以下几点:

你必须是超级用户或具有管理系统崩溃功能的用户。

不要关闭保存崩溃转储信息的属性。系统崩溃转储文件提供了导致系统崩溃的很珍贵的信息。

不要轻易删除系统崩溃信息。

1.如何显示当前的崩溃转储设置
# dumpadm

Dump content: kernel pages

Dump device: /dev/dsk/c0t3d0s1 (swap)

Savecore directory: /var/crash/venus

Savecore enabled: yes

上面输出的意义如下:

转储内容是内核内存的换页。

内核内存将转储到swap设备中,就是/dev/dsk/c0t3d0s1。

系统崩溃转储文件存在/var/crash/venus目录。

系统的崩溃转储功能是启动着的。

2.如何修改当前的崩溃转储设置
命令介绍

# dumpadm -c content -d dump-device -m nnnk | nnnm | nnn% -n -s savecore-dir

dumpadm命令的各个参数具体意义列在表17-4中。

表17-4 dumpadm命令的参数列表

转储参数
描 述

-c content
转储的数据类型。默认的转储内容是内核的内存。使用all关键字是指所有内存

-d dump-device
系统崩溃时,临时存储的专门设备

-m nnnk | nnnm | nnn%
在savecore目录中为了存储崩溃转储文件所留的专门空间。这个参数有可能是kb(nnnk),也有可能mb(nnnm),也有可能是百分比(nnn%)

-n 或-y
是否自动进行崩溃转储,y为是,n为否

-s savecore-dir
用来改变崩溃转储文件的路径。默认路径是/var/crash/hostname


例17-4 转储内容改为所有内存,转储目录改为/dev/dsk/c0t1d0s1,转储空间最大为这个文件系统的10%。

先查看原来的转储设置:

# dumpadm

Dump content: kernel pages

Dump device: /dev/dsk/c0t3d0s1 (swap)

Savecore directory: /var/crash/pluto

Savecore enabled: yes

更改转储设置:

# dumpadm -c all -d /dev/dsk/c0t1d0s1 -m 10%

Dump content: all pages

Dump device: /dev/dsk/c0t1d0s1 (dedicated)

Savecore directory: /var/crash/pluto (minfree = 77071KB)

Savecore enabled: yes

3.如何检查崩溃转储文件内容
例17-5 使用mdb工具输出崩溃转储文件内容,其中包括系统信息和在/etc/system文件中可调用的一些参数。

# /usr/bin/mdb -k unix.0

Loading modules: [ unix krtld genunix ip nfs ipc ptm ]

> ::status

debugging crash dump /dev/mem (64-bit) from ozlo

operating system: 5.10 Generic (sun4u)

> ::system

set ufs_ninode=0x9c40 [0t40000]

set ncsize=0x4e20 [0t20000]

set pt_cnt=0x400 [0t1024] 

Tags:系统 core 转储文件
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明