原文:http://czmmiao.iteye.com/blog/1144999

DUMP文件概述

为了增强故障分析能力,IBM的服务器增加了对设备故障当前环境的保存功能,就是保存一份设备故障时的内存、CPU寄存器、IO等设备的数据和状态信息,如果系统并没有停住,只是某个程序死掉,会产生CORE DUMP,在当前目录下产生一个CORE文件。而如果操作系统死掉,则产生System DUMP或者System Crash,通常会引起系统停机。DUMP的记录如下图所示。

作为一般客户通常只需要收集DUMP信息,并反馈给IBM工程师即可。当发生系统DUMP时,机器将会被宕下来。可能的原因包括:系统在进行内核操作时发生了未知的意外或者不能对其进行正常处理,都会引起DUMP。也可以由系统管理员发出命令,强制系统DUMP。
当系统进行DUMP时,DUMP管理设施自动将内核相关的数据(kernel segment0及其他由内核或者内核扩展程序记录在主DUMP表中的内存块)复制到主DUMP设备。可以把DUMP理解为系统当时的一个快照,供以后分析,分析DUMP可以在其他机器上进行,但需要复制一份此机器的内核程序,即unix_mp或unix_mp64.没有对应于DUMP的内核程序是午饭进行DUMP分析的。
DUMP的生成过程

CORE DUMP的生成过程

在进程运行出现异常行为时,例如无效地址访问、浮点异常、指令异常等,将导致系统转入内核态进行异常处理(即中断处理),向相应的进程发出特定信号例如 SIGSEGV、SIGFPE、SIGILL 等。如果应用进程注册了相应信号的处理函数(例如可通过 sigaction 注册信号处理函数),则调用相应处理函数进行处理(应用程序可以选择记录信息后生成 core dump 并退出);否则将采取默认动作,例如 SIGSEGV 的默认动作是生成 core dump 并退出程序。
进程 coredump 的时候,操作系统会将进程终止并释放其占用的资源,正常情况下,应用进程 coredump 不会对系统本身的运行造成危害。当然如果系统中存在与此进程相关的其他进程,则这些进程会受到影响,至于后果则视其对此异常的具体处理而定。
 由于相关指令已经包含在可执行文件中,core 文件一般只包含进程异常时相关的内存信息。其格式可参考 /usr/include/sys/core.h 或者 AIX 帮助文档的“Files Reference”章节。我们一般需要结合 core 文件以及可执行程序,来分析问题所在
 注:由于进程信号处理本质上是异步的,应用进程注册的信号处理函数中使用的例程需要保证是异步信号安全的,例如不能使用诸如 pthread_ 开头的例程。 
系统 dump 生成过程 
系统异常 dump 的具体过程与应用进程类似,但由于更接近底层,为了避免问题所在的资源(例如文件系统)正好包含在生成 dump 需要使用的资源中,造成 dump 无法生成,操作系统一般会用最简单的方式来生成 dump。例如系统内存小于 4G 的情况下,一般直接将 dump 生成在 pagingspace 中;大于 4G 时,会建专门的 lg_dumplv 逻辑卷(裸设备),默认的dump设备/dev/hd6,次设备是/dev/sysdumpnull保存 dump 信息。在系统重启的时候,如果设置的 DUMP 转存目录(文件系统中的目录)有足够空间,它将会转存成一个文件系统文件,缺省情况下,是 /var/adm/ras/ 下的 vmcore* 这样的文件。
下面是常见的转储设备大小规则
当服务器的内存大于4GB时,在安装AIX时,就会为系统 dump 创建一专用区域,该逻辑卷名就是 lg_dumplv. 其缺省大小是按以下规则分配的:
4GB < = 服务器的内存 〈 12GB lg_dump 的大小为 1GB
12GB < = 服务器的内存 〈 24GB lg_dump 的大小为 2GB
24GB < = 服务器的内存 〈 48GB lg_dump 的大小为 3GB
48GB < = 服务器的内存 lg_dump 的大小为 4GB 
系统 dump 一般可以通过升级微码、提高系统补丁级别、升级驱动等方式解决。
环境变量设置 
可以通过 /etc/security/limits 文件对各用户的基本配置参数包括 core 大小进行限制。或者通过 ulimit 更改当前环境下的 core 大小限制。
默认情况下,应用进程生成 core dump 时都使用文件名 core。为了避免同一工作目录下的进程 core 相互覆盖,可以定义环境变量 CORE_NAMING=true,然后启动进程,这样将生成名为 core.pid.ddhhmmss 的文件。可以使用 file core 命令查看 core 是哪个进程产生的。
默认情况下,应用进程 dump 时会包含所有的共享内存,如果 dump 时想排除共享内存内容,可以在启动进程之前设置环境变量 CORE_NOSHM=true.
系统有一个参数 fullcore 用于控制是否在程序 coredump 时生成完整的 core。为避免信息丢失,建议打开 fullcore。可以使用 lsattr –El sys0 查询是否将 fullcore 打开,使用 chdev -l sys0 -a fullcore=true 将 fullcore 状态更改为打开。如果想让系统DUMP后自动重新启动,(对于远程管理员比较有用,否则管理员必须到现场按开关重新启动计算机,可以执行 lsattr –El sys0 查看autorestart是否为true,使用 chdev -l sys0 -a autorestart=true 将 autorestart状态更改为打开。两者都可以通过smit chgsys的smit菜单来修改

DUMP文件管理

由于DUMP文件较为复杂而且一般都交给IBM工程师进行分析,在次本文不做讨论,下文主要探讨DUMP文件的管理。

查看当前DUMP设备的配置信息

#sysdumpdev -l
primary              /dev/lg_dumplv           ##主DUMP设备 
secondary            /dev/sysdumpnull      ##次DUMP设备 
copy directory       /var/adm/ras            ##DUMP文件拷贝目录 
forced copy flag     TRUE                       ##是否进行提示将DUMP文件复制到外设 
always allow dump    FALSE                  ##总是进行DUMP 
dump compression     ON                     ##是否启用DUMP文件压缩 
type of dump         traditional

注意

1.旧版本的 AIX “always allow dump”可能默认为关闭;为方便系统 crash 时问题定位,建议打开。当该选项设置为true时,当按下服务器reset按钮或者预先设定的DUMP键盘序列的时候系统会自动生成DUMP。

打开命令

#sysdumpdev -KP

关闭命令

#sysdumpdev -kP

或者使用smitty -> System Environments-> Change / Show Characteristics of System Dump 菜单设置。

2.当系统重启的时候,如果设置了force copy flag为true,可以有提示让你将dump复制到外置介质,例如磁带。这样磁盘目录不够的时候,也有机会保留(往往DUMP设备与系统交换分区共用同一逻辑卷,而系统启动后,交换区将被覆盖)一份系统DUMP。

3.如果想允许DUMP文件进行压缩,则使用下列命令

打开命令

#sysdumpdev -CP

关闭命令

#sysdumpdev -cP

sysdump命令使用示例
创建DUMP设备

#mklv -y dumplv -t sysdump rootvg 10

将逻辑卷 hd7 临时指派为主要转储设备:
#sysdumpdev  -p /dev/hd7

估计需要的转储设备大小:
#sysdumpdev  -e 或者 smit dump_estimate

将磁带设备 rmt0 临时指派为辅助转储设备:
#sysdumpdev  -s /dev/rmt0 
显示先前的转储的统计信息:
#sysdumpdev  -L 
永久地将主要转储设备的数据库对象更改到 /dev/newdisk1,输入:
#sysdumpdev  -P  -p /dev/newdisk1 
确定是否存在新的系统转储,输入:
#sysdumpdev  -z 
如果最近发生了系统转储,则会出现与下列相似的输出:
4537344 /dev/hd7
将远程转储文件 /var/adm/ras/systemdump(在主机 mercury 上)指派给主要转储设备,输入:
#sysdumpdev  -p mercury:/var/adm/ras/systemdump 
在主机名和文件名之间必须输入冒号 :。
指定系统崩溃后转储要复制到其上的目录(如果转储设备是 /dev/hd6),输入:
#sysdumpdev  -d /tmp/dump 
这会在系统崩溃后试图将转储从 /dev/hd6 复制到 /tmp/dump。如果在复制过程中出现了错误,那么系统继续引导,但是丢失了转储。
指定系统崩溃后转储所要复制其上的目录,如果转储设备是 /dev/hd6,输入:
#sysdumpdev  -D /tmp/dump
这会在崩溃后尝试将转储从 /dev/hd6 复制到 /tmp/dump 目录。如果复制失败,那么会提示您一个菜单以允许手工将转储复制到某个外部介质。

-c 指定不压缩转储。-c 标志只适用于 AIX 4.3.2 和以后的版本。
-C 指定所有将来的转储在其写入转储设备之前将其压缩。 -C 标志只适用于 AIX 4.3.2 和以后的版本。
-d Directory 指定系统引导时转储所复制到的目录 。 如果引导时复制失败,那么 -d 标志会忽略系统转储。
-D Directory 指定系统引导时转储所复制到的目录 。 如果引导时复制失败,那么使用 -D 标志允许您将转储复制到外部的介质。

注: 使用 -d Directory 或 -D Directory 标志时, 会检测下列的错误情况:

-e 估计当前运行的系统的转储大小(以字节表示)。 如果压缩转储,那么所显示的大小是压缩之后大小的估计值。
-i 表示从系统函数调用 sysdumpdev 命令。 只有系统实用程序才使用该标志。如果不是自动 IBM 函数的函数已经修改了有效值,那么 -i 标志就不会作请求的更改;也就是说,-i 标志不会覆盖先前的更改。
-I 重新设置先前更改的指示信息。指定 -I 标志后,用 -i 标志就允许更改。
-k 如果您的机器有钥匙方式开关,那么在用复位按钮或转储键控序列强制转储前,钥匙需要处于服务位置。这是缺省设置。
-K 如果您的机器有钥匙方式开关,那么钥匙处于正常位置时使用复位按钮或转储键序列将强制转储,或在没有钥匙方式开关的机器上也将强制转储。

注: 对于没有钥匙方式开关的机器, 不能用复位按钮强制转储,在钥匙开关没有设置了该值的机器上也不能转储。

-l 列出主要和辅助转储设备、复制目录和 forcecopy 属性的当前值。
-L 显示最近的系统转储的统计信息。 这包含最近的转储的日期和时间、所写的字节数和完成状态。 如果压缩了转储,那么该标志既显示转储的原始的未压缩的大小,也显示了转储的压缩后的大小。 压缩后的大小是实际写入转储设备的大小。

注:
显示的转储大小可能不会反映介质上的转储的精确大小。 由于磁盘和复制块大小,因此会有小小的差别。
-P 使 -p 或 -s 标志指定的转储设备成为永久设备。-P 标志 只能与 -p 或 -s 标志一起使用。
-p Device 暂时将主要转储设备更改为指定的设备。 该设备可以是逻辑卷或磁带设备。对于网络转储,该设备可以是主机名和路径名。
-q 禁止输出到标准输出的所有消息。如果该标志 与 -l 、-r 、-z 或 -L 标志一起使用,则会忽略 -q 命令。
-r Host : Path 释放服务器 Host 上远程转储文件所使用的空间。Path 指定转储文件的位置。
-s Device 暂时将辅助转储设备更改为指定的设备。 该设备可以是逻辑卷或磁带设备。对于网络转储,该设备可以是主机名和路径名。
-z 确定是否出现新的系统转储。如果出现,则会将包含转储大小(以字节表示)和转储设备名的字符串写到标准输出。如果不存在新的系统转储,则不返回任何东西。 在现有的系统转储上运行 sysdumpdev -z 命令后,就不认为转储是最新的了。

errpt报错E87EF1BE的解决方案

E87EF1BE   0926082807 P O dumpcheck      The largest dump device is too small.
信息.断定为存放dump文件的lg_dumplv容量不够.一般推荐的 dump device 值大小为 sysdumpdev –e 估计值的 1.5 倍。
需要扩容.扩容步骤如下:
1.查看lg_dumplv大小的估计值
#sysdumpdev -e
0453-041 Estimated dump size in bytes: 1287651328 
即1.2G
2.现在lg_dumplv大小
#lslv lg_dumplv 
其中PP SIZE:        256 megabyte(s)
       PPs:            4
经计算,现在容量为1G.需要扩容0.2G

3.查看lg_dumplv所在的vg的容量是否够用
 #lsvg rootvg 
  其中 PP SIZE:        256 megabyte(s)
         TOTAL PPs:      1092 (279552 megabytes)
         FREE PPs:       826 (211456 megabytes)
经计算,vg剩余容量为206.5G,因为根盘做了镜像.故,可用剩余容量为103G左右.因pp size为256m,故扩容2pps,即0.5G(其实扩1个pp也可以.2个放心点.)
4.扩容操作
 #extendlv lg_dumplv 2 
如果是PAGING空间的DUMP话,应该 #chps -s n hd6 (n为多少LP)
5.检查当前lg_dumplv的大小.
  #lslv lg_dumplv 
  其中 PP SIZE:        256 megabyte(s)
         PPs:            6
即,现在容量为1.5G.
6.使用dumpcheck命令查看,是否还出现errpt信息
  #/usr/lib/ras/dumpcheck
  #errpt
不出现,则为成功.

参考至:《走进IBM小型机世界》Orian著

http://www.kuqin.com/aixcmds/aixcmds5/sysdumpdev.htm

http://tech.cncms.com/os/unix/83840.html

http://jbweng.blog.163.com/blog/static/677153320101114101013796/

http://www.ibm.com/developerworks/cn/aix/library/0806_chench_core/#2. 应用进程 core dump 分析 |outline

转载于:https://www.cnblogs.com/liujiacai/p/7483184.html

(转)AIX的Dump文件学习笔记相关推荐

  1. oracle修改asm参数文件,学习笔记:Oracle RAC参数文件管理 修改创建asm中的spfile文件...

    天萃荷净 Oracle rac创建修改asm中的spfile文件内容 create spfile to asm --查看sid SQL> show parameter instance_name ...

  2. oracle12c口令文件,学习笔记:Oracle 12C ASM 新特性 共享密码文件

    天萃荷净 测试试验ORACLE 12C ASM 新特性 共享密码文件的详细过程 在ORACLE 12C之前大家都知道密码文件是存放在?/dbs或者?/database中,如果要修改修改sysdba权限 ...

  3. DUMP文件查看笔记

    在win10系统上,生成dump文件,并查看 1 生成dump文件 在cmd窗口,通过[jps]命令查看jvm中启动的进程,此命令会附带上main函数所在类名.譬如springboot中的启动类App ...

  4. STM32的map文件学习笔记

    前言 前几个月针对公司自己的芯片写了个程序,这个程序有个硬性要求,就是能用的FLASH空间只有4KB,之前已经写得差不多了,最终占用空间3.6KB. 这不,最近又得加需求,还剩一点点FLASH空间可以 ...

  5. Python 文件学习笔记之 File(文件) 对象常用函数

    file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1.file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触 ...

  6. java 解析csr文件_ANS.1结合CSR文件学习笔记

    1.填充内容说明 CA证书申请CSR文件主要包括Common Name,Organization,Organizational Unit,City/Locality,State/County/Regi ...

  7. PE文件学习笔记(五):导入表、IAT、绑定导入表解析

    1.导入表(Import Descriptor)结构解析: 导入表是记录PE文件中用到的动态连接库的集合,一个dll库在导入表中占用一个元素信息的位置,这个元素描述了该导入dll的具体信息.如dll的 ...

  8. winform界面嵌入dwg图纸_WPF中使用WinForm控件预览DWG文件(学习笔记)

    操作环境:XP,C# ,.Net4.0和VS2010中测试 WinForm中使用DWGThumbnail不用这么麻烦,下面讨论的是在WPF中使用,WPF中无法直接引用DWGThumbnail.ocx来 ...

  9. Python3 基础学习笔记 C09【文件和异常】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  10. svn拉取文件合并_svn如何使用import目录作为工作拷贝+我的svn学习笔记

    前奏 svn作为一款极其优秀的开源版本控制系统,应用广泛,从组织到个人遍及各行各业.因此学习和熟练掌握它,对提高我们日常工作效率和数据安全非常重要,尤其对开发人员协同管理Project的文档,代码,各 ...

最新文章

  1. 牛客网——求平均年龄(水题)
  2. Request —— 获取请求行数据 获取请求头数据 获取请求体数据
  3. pynlpir.LicenseError: Your license appears to have expired. Try running pynlpir update.
  4. mysql填写账户远程_如何开启MySQL的远程帐号
  5. 关于idea的git账号与电脑的git账号不一致的问题。已解决!
  6. mimo-ofdm无线通信技术及matlab实现_智芯文库 | FPGA无线通信课程连载——扰码的原理及实现...
  7. C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
  8. JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
  9. [Unity3D]ml-agent入门案例
  10. TFWmodi-修改tfw文件
  11. 加拿大大学商用计算机专业,加拿大大学计算机专业排名一览
  12. 虚拟机VM12磁盘扩容
  13. 语音之家SOTA | TIOBE 滚动测试报 2021.10
  14. Delphi XE2控件安装方法
  15. Page migration
  16. 搭建PHP网站开发环境
  17. 【老九学堂】【C语言】CodeBlocks安装文档
  18. 物联网入门教程【下】
  19. 8、RH850 F1 IIC通讯功能和配置
  20. 万马齐喑究可哀-中文编程的又一波讨论

热门文章

  1. SQLite升级数据库:
  2. Objective-C中的属性机制
  3. HSRP+生成树+vlan间路由!
  4. 路由汇总之二ospf路由汇总
  5. 怎么实现单击span时给span添加边框
  6. vue学习日志-过滤器
  7. FreeRTOS之源码 及 移植详解
  8. Android设计模式系列-组合模式
  9. [转]android MapView 定位与Overlay onTap事件处理
  10. 用十句简单英语激活你的口语