AIX 下的 core dump 分析入门

合集下载

AIX系统core文件

AIX系统core文件

Ldd 可以查看程序调用了哪些库文件。

当进程在异常终止运行时,系统会把该进程对应的地址空间中的数据写到core文件中(这个过程被称为dump),以便程序员对其进行分析,找出进程异常终止的原因。

缺省情况下,异常终止的进程在启动它的当前目录下产生core文件。

在AIX 4.3.3中,所有的core文件的文件名都是core,如果不只一个程序产生dump或者相同的程序dump多次,它们都会产生相同文件名的core文件,那么就会丢失比较早的core 文件。

从AIX 5.1开始,改变了core文件的命名方法,使得每一个core文件拥有惟一的文件名,从而避免了新的core文件覆盖旧的core文件,这个特色更加有助于程序员调试和跟踪运行失败的程序。

默认情况下,一个core文件的文件名是core。

要使用AIX 5L中core文件命名的新方法,就要把CORE_NAMING环境变量的值设置为yes。

在AIX 5L中,把当前用户的CORE_NAMING环境变量的值设置成yes之后,随后启动的进程产生的core文件名才能惟一的。

新的core文件名的格式是core.pid.ddhhmmss。

其中pid是进程号,dd是当前月份中的日子,hh表示小时,mm表示分,ss表示秒。

对于一个占用内存资源很大的进程产生的core文件也非常大,因此如果经常有进程产生core文件,而core文件名都不相同,那么产生的core就会占用非常多的文件系统空间,所以系统管理员要定期为程序员收集这些core文件,并删除这些文件。

在AIX 5.3中,用户可以设置产生压缩的core文件和指定一个目录来保存core文件,用lscore命令查看当前用户或指定用户的core设置,例如:$ lscore compression: off path specification: off corefile location: not set naming specification: off $要查看peter用户的core设置,命令是lscore peter。

AIX下core dump定位简介

AIX下core dump定位简介
# cd /tmp/snapcore # dbx –p /=./ a.out core Type 'help' for help. [using memory image in core] reading symbolic information ...warning: no source compiled with -g
Core dump 基本知识
本节主要探讨 core dump 产生的背景知识。对这部分不感兴趣的读者可以直接阅读第二章,了 解基本的 core dump 定位手段。
起源
软件是人思维的产物。智者千虑,必有一失,人的思维总有缺陷,反映到软件层面上就是程序 bug。程序 bug 的终极体现就是 core dump,core dump 是软件错误无法恢复的产物。
Segmentation fault in raise at 0xd022e1e4
0xd022e1e4 (raise+0x40) 80410014
lwz r2,0x14(r1)
显示出 core 发生时,当前进程执行到的位置(-g 编译的情况下能够看到具体的行):
(dbx) where raise(??) at 0xd022e1e4 main(0x1, 0x2ff22d48) at 0x100019c4
std::cout << " input str!\n" << std::endl; std::cin >> str; return 0; }
寻找 core dump
应用进程的 core 产生在其当前工作目录下,可以在应用程序内部使用 chdir 函数切换当前工作 目录。使用 procwdx 命令可以查看进程的当前工作目录。系统的 core 生成在 lg_dumplv 下,并 在重启时转移到/var/adm/ras/目录下(如果有足够空间的话,否则继续保留在 lg_dumplv,并随 时有可能被覆盖)。 可以使用 errpt -a 查看标识 C0AA5338 SYSDUMP(系统 core)、B6048838 CORE_DUMP(进 程 core)的详细错误信息,获取生成 core 的进程以及 core 文件位置。使用 snap –ac 收集系统的 dump 信息。

使用DBX分析AIX下的 CoreDump

使用DBX分析AIX下的 CoreDump

使用DBX分析AIX 下的CoreDumpPS:Where can you get dbx?It is part of bos.adt.debug# lslpp -w /usr/bin/dbxFile Fileset Type-------------------------------------------/usr/bin/dbx bos.adt.debug Symlink以下转自/?6141/viewspace-18882I core dump 分析入门AIX专家俱乐部E ?!CR8Z#S)[环境变量设置`#X`4\]9h|8]0;Uy%D]6sQ.i9O0 可以通过/etc/security/limits 文件对各用户的基本配置参数包括core 大小进行限制。

或者通过ulimit 更改当前环境下的core 大小限制。

AIX专家俱乐部vF?I9u:B1@]!HCc\!v_J-r)r3U0 默认情况下应用进程生成core dump 时都使用文件名core。

为了避免同一工作目录下的进程core 相互覆盖可以定义环境变量CORE_NAMING=true然后启动进程这样将生成名为core.pid.ddhhmmss 的文件。

可以使用file core 命令查看core 是哪个进程产生的。

:EvFu#O@$n*s)g0AIX专家俱乐部0U(p#k2_:J/} G"v$D.E默认情况下应用进程dump 时会包含所有的共享内存如果dump 时想排除共享内存内容可以在启动进程之前设置环境变量CORE_NOSHM=true.R1I rjg09kkS%v!@6o0 系统有一个参数fullcore 用于控制是否在程序coredump 时生成完整的core。

为避免信息丢失建议打开fullcore。

可以使用lsattr –El sys0 查询是否将fullcore 打开使用chdev -l sys0 -a fullcore=true 将fullcore 状态更改为打开。

应用程序运行时产生coredump故障处理

应用程序运行时产生coredump故障处理

应用程序运行时产生coredump故障处理环境:操作系统:AIX Common 数据库:无关应用程序:32-bit症状:客户应用结息程序在运行过程中产生coredump。

程序故障与处理数据量有关,当把结息网点分成两批,可以顺利完成。

解决方法:应用程序的问题本来不属于我们维保的范畴,因为客户关系比较好,开发商太极公司也是我们的友军,抱着试试看的态度来解决。

用svmon跟踪程序的执行,发现其在运行期间,work process private部分的内存增长速度非常快,并且很明显地,接近65536页的时候即发生core dump。

这表明程序故障与内存的过度使用有关,达到256MB阀值时溢出。

work process private与用户程序的堆、栈有关,其中堆常为malloc系统调用分配的内存空间。

这里与ulimit设置无关(已经设置为unlimited),与AIX 32位程序的内存分配行为有关。

32位程序最多可以使用16个内存段,其中segment 2~C用户可用作堆栈和共享内存,默认仅使用segment 2存放程序堆栈数据,最大值为256MB,所以默认情况下用户程序最多只能分配256MB的堆内存。

而这个默认行为,可以通过在执行程序前,设置LDR_CNTRL环境变量来调节堆栈部分和共享内存的比例,例如:LDR_CNTRL=MAXDATA=0x30000000,设置了堆栈内存空间最多可使用3个内存段,共768MB 内存。

下面是一个测试的例子:# include <stdio.h>main (){int i;unsigned char *p;i=0;while ( i < 20 ){printf ( "i=%d\n", i );/* 32M */p=(unsigned char *)malloc(33554432);memset(p,'\0',33554432);i=i+1;sleep(1);}sleep(120);}直接运行该程序,在i=7之后产生coredump,采用下面的方式执行命令:# LDR_CNTRL=MAXDATA=0x3000000 ./testmalloc程序能够正常执行结束运行,同时运行的svmon显示程序已经使用到了256MB以上的堆空间。

coredumpctl使用

coredumpctl使用

coredumpctl使用使用coredumpctl进行核心转储分析概述核心转储是在系统发生崩溃或故障时生成的一种文件,用于记录系统状态和进程信息。

通过分析核心转储文件,我们可以了解崩溃原因,帮助排除故障并改进系统稳定性。

coredumpctl是一个命令行工具,可以帮助我们管理和分析核心转储文件。

1. 安装coredumpctl在大多数Linux发行版中,coredumpctl已经预装。

如果您的系统没有安装coredumpctl,可以通过以下命令安装:```sudo apt install systemd-coredump```2. 查看核心转储文件要查看系统中的核心转储文件,可以使用以下命令:```coredumpctl list```此命令将列出所有可用的核心转储文件,包括文件名、PID、时间戳和所属用户。

您可以根据需要选择特定的核心转储文件进行分析。

3. 分析核心转储文件要分析核心转储文件,可以使用以下命令:```coredumpctl gdb```这将使用GNU Debugger (GDB)打开最新的核心转储文件。

您可以使用GDB命令进行进一步的调试和分析。

4. 显示核心转储文件信息要查看核心转储文件的详细信息,可以使用以下命令:```coredumpctl info <coredump文件名>```通过此命令,您可以获得关于核心转储文件的各种信息,包括进程名称、进程ID、信号、崩溃时间和核心转储文件大小等。

5. 导出核心转储文件您可以将核心转储文件导出到其他位置以进行进一步分析,可以使用以下命令:```coredumpctl dump <coredump文件名> > <导出文件名>```通过此命令,您可以将核心转储文件导出到指定的文件。

6. 清除核心转储文件核心转储文件可能会占用大量磁盘空间,所以及时清除不再需要的核心转储文件是很重要的。

您可以使用以下命令清除核心转储文件:```coredumpctl remove <coredump文件名>```此命令将删除指定的核心转储文件。

AIX UNIX 服务器技巧

AIX UNIX 服务器技巧

UNIX一、如何修改系统对用户使用资源的默认限制?用户使用系统资源都有一定的限制,在/etc/security/limits文件中限制着用户使用系统资源的多少,系统管理员(root用户)通过修改这个文件的内容可以限制某个用户对系统资源的使用,例如修改某个用户的fsize属性的值来限制用户进程最大可以产生多大的文件。

在/etc/security/limits文件中可以为每个用户所能使用的资源做出明确的限定。

该文件以形式为每个用户记录限制资源的属性。

右表所列的就是这些限制属性的含义。

这些限制属性分为软限制和硬限制,通常软限制的值应该小于或等于硬限制的值,也就是说硬限制的值是上限。

这些限制属性的值都是十进制的整数,是32位的整数,因此这些整数的最大值就是2147483647,除了cpu、nofiles、cpu_hard和nofiles_hard之外,其他属性值的单位都是512字节块。

如果为用户设置了硬限制的值而没有设置软限制的值,则二者相同。

如果某个值为-1,则表示没有限制。

二、如何确定逻辑设备的物理位置?IBM的pSeries服务器使用物理位置编码(Physical Location Codes)和AIX位置编码来确定失败的现场可替换部件(Field Replaceable Unit,简称FRU)。

物理位置编码作用是映射逻辑设备在实际物理结构中具体位置。

物理位置编码是分层的、分级的,能够标示出特定适配器卡在机架、扩展笼、底板(Backplane)以及卡槽的详细位置。

物理位置编码的格式是一个由字母、数字和符号构成的字符串,其中符号有减号(-)、斜线(/)、井号(#)和句点号(.)。

例如物理位置编码P3-Z1-A2.1标示一个SCSI设备,它位于底板3上的SCSI总线1上,SCSI地址是SCSI ID 2、LUN 1。

物理位置编码U1.5-P1-I2标示某个适配器位于第一个机架的5号扩展笼,第一个底板的2 号I/O 插槽中。

coredump文件生成过程

coredump文件生成过程

coredump文件生成过程
生成core dump文件通常发生在程序发生严重错误或崩溃时,
它记录了程序在崩溃时的内存状态和调用栈信息,有助于开发人员
分析问题并进行调试。

下面我会从多个角度来解释core dump文件
生成的过程。

1. 产生原因,当程序发生严重错误,比如访问非法内存、除零
错误、段错误等,操作系统会向程序发送一个信号,通常是SIGSEGV(段错误)或SIGABRT(异常终止),程序在收到信号后会
尝试生成core dump文件。

2. 操作系统设置,在大多数操作系统中,生成core dump文件
需要进行相应的设置。

在Linux系统中,可以使用ulimit命令设置core文件大小限制,使用sysctl命令设置core文件的名称格式和
存储路径。

在Windows系统中,可以通过控制面板中的系统属性进
行设置。

3. 内存转储,当程序接收到信号时,操作系统会将程序的内存
状态以及相关信息写入core dump文件中。

这包括程序的内存布局、寄存器状态、堆栈信息等。

4. 存储位置,生成的core dump文件通常会被存储在当前工作目录或指定的路径下,具体存储位置取决于系统设置和程序运行时的环境变量。

5. 调试分析,生成core dump文件后,开发人员可以使用调试工具(如gdb、windbg等)加载core dump文件,重现程序崩溃时的状态,并进行分析和调试,以找出程序中的错误和异常。

总的来说,生成core dump文件是程序在发生严重错误时的一种自我保护机制,它记录了程序崩溃时的状态信息,为开发人员提供了重要的调试和分析数据,有助于快速定位和解决问题。

coredump的使用方法

coredump的使用方法

coredump的使用方法
通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。

可以理解为把程序工作的当前状态存储成一个文件。

许多程序和操作系统出错时会自动生成一个core文件。

一般Linux系统中,默认是不会产生core dump文件的。

(以下需要切换到root用户进行命令执行)
1coredump的开关和core文件大小限制
1.core文件的名称和生成路径
core文件名如果不设置,则每次产生的core文件名相同,会覆盖原来的core文件,因此需要对core文件名进行设置,设置方法有两种,具体如下:
2.生成core文件并使用gdb进行查看。

coredump文件的生成方式

coredump文件的生成方式

coredump文件的生成方式
Core dump文件是在程序发生严重错误(如段错误、内存访问
越界等)时,操作系统将程序当前的内存状态以文件的形式保存下
来的一种机制。

生成core dump文件的方式可以通过以下几种途径:
1. 通过ulimit命令设置core dump文件大小限制,可以使用ulimit命令来设置core dump文件的大小限制,使用ulimit -c unlimited命令可以将core dump文件的大小限制设置为无限制,
这样当程序发生错误时就会生成core dump文件。

2. 在程序中使用系统调用设置,在程序中可以通过调用系统函
数来设置生成core dump文件的方式,比如使用ulimit函数设置core dump文件大小限制,或者使用prctl函数设置生成core dump
文件的路径等。

3. 通过操作系统的配置文件设置,在一些操作系统中,可以通
过修改配置文件(如/etc/security/limits.conf)来设置生成
core dump文件的大小限制和路径等参数。

4. 使用特定的调试工具,在调试程序时,可以使用特定的调试
工具(如gdb)来设置程序发生错误时生成core dump文件,通过gdb工具可以设置生成core dump文件的路径和大小限制等参数。

总的来说,生成core dump文件的方式可以通过操作系统的设置、程序中的系统调用、配置文件的修改以及调试工具的使用等途径来实现。

不同的操作系统和调试工具可能会有不同的设置方法,需要根据具体情况进行选择和配置。

CoreDump详解

CoreDump详解

CoreDump详解1. 什么是Core:Sam之前一直以为Core Dump中Core是Linux Kernel的意思. 今天才发现在这里,Core是另一种意思:在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作core ,用线圈做的内存就叫作core memory。

如今,半导体工业澎勃发展,已经没有人用core memory 了,不过,在许多情况下,人们还是把记忆体叫作core 。

2. 什么是Core Dump:我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。

虽然系统没事,但我们下次仍可能遇到相同的问题。

于是这时操作系统就会把程序当掉时的内存内容dump 出来(现在通常是写在一个叫core 的file 里面),让我们或是debugger 做为参考。

这个动作就叫作core dump。

3. Core Dump时会生成何种文件:Core Dump时,会生成诸如core.进程号的文件。

4. 为何有时程序Down了,却没生成Core文件。

Linux下,有一些设置,标明了resources available to the shell and to processes。

可以使用#ulimit -a来看这些设置。

(ulimit是bash built-in Command)-a All current limits are reported-c The maximum size of core files created-d The maximum size of a process鈥檚data segment-e The maximum scheduling priority ("nice")-f The maximum size of files written by the shell and its children-i The maximum number of pending signals-l The maximum size that may be locked into memory-m The maximum resident set size (has no effect on Linux)-n The maximum number of open file descriptors (most systems do not allow this value to be set)-p The pipe size in 512-byte blocks (this may not be set)-q The maximum number of bytes in POSIX message queues -r The maximum real-time scheduling priority-s The maximum stack size-t The maximum amount of cpu time in seconds-u The maximum number of processes available to a single user-v The maximum amount of virtual memory available to the shell-x The maximum number of file locks从这里可以看出,如果-c是显示:core file size (blocks, -c)如果这个值为0,则无法生成core文件。

oracle coredump

oracle coredump
Automatically REBOOT system after a crash false
Continuously maintain DISK I/O history false
HIGH water mark for pending write I/Os per file [33]
LOW water mark for pending write I/Os per file [24]
# chdev -l sys0 -a fullcore=true
上述命令也可以通过smitty来完成:
smitty --> System Environments --> Change/ Show Characteristics of Operating System
Change/ Show Characteristics of Operating System
Core Dump杂记
作者:未知 时间:2005-09-13 23:03 出处: 责编:chinaitpower
摘要:Core Dump杂记
1、开启系统的Core Dump功能
ulimit -c core_file_size_in_kb
程序如下:
#include
int main()
{
int i=0;
int j=5;
int tmp;
for(; i < 10; i++, j--)
{
tmp=i/j;
printf("%d/%d=%dn", i, j, tmp);
}
}
该程序运行到i=5时,会发生浮点运算错误(被除数等于0,j=0)

coredump文件考出解析

coredump文件考出解析

coredump文件考出解析Core Dump文件是指在计算机程序运行时,出现异常情况导致程序崩溃时所生成的一种文件。

这个文件记录了程序在崩溃时的内存状态信息,包含了程序运行时的堆栈信息、寄存器状态以及其他相关的调试信息等。

通过分析Core Dump文件,可以帮助开发人员定位和解决程序崩溃的问题。

Core Dump文件的解析对于软件开发人员来说是一项非常重要的技能,可以帮助他们快速定位和修复程序中的bug。

下面就让我们来了解一下Core Dump文件的解析过程吧。

要解析Core Dump文件,我们需要借助一些调试工具。

常用的调试工具有GDB(GNU Debugger)、LLDB(LLVM Debugger)等。

这些工具可以加载Core Dump文件,并提供一系列命令和功能来分析和调试程序。

解析Core Dump文件的第一步是加载文件。

使用调试工具加载Core Dump文件后,我们可以查看文件中的各种信息。

比如,我们可以查看程序崩溃时的堆栈信息,了解程序在崩溃前的执行路径。

通过分析堆栈信息,我们可以确定程序崩溃的位置,找出导致程序崩溃的原因。

除了堆栈信息,Core Dump文件还包含了程序崩溃时的内存状态信息。

我们可以通过查看内存状态,了解程序在崩溃前的变量值、函数调用等信息。

这对于定位程序崩溃的原因非常有帮助。

在解析Core Dump文件时,我们还可以使用调试工具提供的其他功能,比如查看变量的值、设置断点、单步执行等。

这些功能可以帮助我们进一步分析和调试程序。

在进行Core Dump文件解析时,我们需要注意以下几点。

首先,要保证使用的调试工具版本与生成Core Dump文件的程序版本一致,以免出现兼容性问题。

其次,要注意文件的大小,如果Core Dump 文件过大,可能需要分析工具支持加载大文件。

此外,要注意保护好Core Dump文件的安全,避免泄露敏感信息。

除了使用调试工具解析Core Dump文件,还有一些第三方工具和库可以帮助我们更方便地分析Core Dump文件。

AIX Dump Deivce

AIX Dump Deivce
hd2 jfs2 40 80 2 open/syncd /usr
hd9var jfs2 40 80 2 open/syncd /var
hd3 jfs2 16 32 2 open/syncd /tmp
hd6 paging 244 488 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 8 16 2 open/syncd /
sysdumpdev -P -p /dev/sysdumplv00
sysdumpdev -P -s /dev/sysdumplv01
上面的两个命令可能应该是
sysdumpdev -P -p /dev/sysdumplv0000
sysdumpdev -P -s /dev/sysdumplv0100
3.1 查看当前系统的dump device
# sysdumpdev -l
primary /dev/lg_dumplv
secondary /dev/sysdumpnull
copy directory /var/adm/ras
forced copy flag TRUE
always allow dump FALSE
dump compression ON
在AIX 52以上,主dump设备都是建立在rootvg上的一个叫lg_dumplv的逻辑卷上。
3.2 修改主dump设备的位置
可以将主dump设备临时指定到/dev/hd6(swap)或者/dev/sysdumpnull(空dump设备,也就是没有)
-P primary dump device
-p Makes permanent the dump device specified by -p or -s flags.

linux coredump文件产生原理

linux coredump文件产生原理

在Linux系统中,coredump文件是当进程异常终止时由操作系统生成的。

当进程由于收到信号、运行时错误、硬件异常等原因异常终止时,操作系统会将进程的当前内存快照保存到coredump文件中,以便后续分析和调试。

coredump文件的生成原理如下:
当进程异常终止时,操作系统会通过信号机制通知进程,并生成coredump文件。

操作系统会选择一个合适的文件路径和文件名来保存coredump文件。

默认情况下,coredump文件会被保存在当前目录下,文件名为“core”。

操作系统会将进程的内存快照保存到coredump文件中。

这个快照包括了进程的代码段、数据段、堆、栈等内存区域的内容。

coredump文件中还包括了进程的寄存器状态、信号屏蔽状态等信息,这些信息对于后续的调试和分析非常重要。

生成coredump文件的过程是由内核来完成的,因此需要在内核配置中启用coredump功能。

在Linux系统中,可以通过修
改/etc/security/limits.conf文件来设置允许生成coredump文件的用户和大小限制。

在程序运行时,也可以通过设置ulimit命令来控制coredump文件的生成。

总之,coredump文件是Linux系统中非常重要的调试工具,通过它可以帮助开发人员快速定位和解决问题。

dump文件分析

dump文件分析

dump文件分析Dump文件是一种记录电脑系统状态的文件,通常被用于分析系统崩溃或错误的原因。

通过分析dump文件,可以帮助我们确定问题的根源,并采取相应的措施来解决它们。

在本文中,我将详细介绍如何进行dump文件分析,包括导出和读取dump文件中的信息,以及如何利用这些信息诊断和解决问题。

首先,我们需要了解如何导出一个dump文件。

当系统遇到错误或崩溃时,会自动生成一个dump文件,通常位于Windows系统的Minidump文件夹中。

要导出dump文件,可以按照以下步骤进行操作:1. 打开“控制面板”,选择“系统和安全”。

2. 选择“系统”,然后点击“高级系统设置”。

3. 在“高级”选项卡下,点击“设置”。

4. 在“启动和故障恢复”部分,点击“设置”按钮。

5. 在“系统故障”部分,将“写入调试信息”设置为“小型内存转储”。

6. 点击“确定”来保存更改。

一旦dump文件生成,我们可以使用调试工具来读取和分析它。

Windows操作系统提供了一个名为WinDbg的调试工具,可以用来分析和调试dump文件。

以下是一些基本的WinDbg命令,帮助我们读取和分析dump文件中的信息:1. 打开WinDbg工具,选择“文件”->“打开转储文件”。

2. 导航到dump文件的位置,选择并打开它。

3. 使用“!analyze -v”命令来执行自动分析。

这将提供有关崩溃的基本信息,如错误代码和崩溃地址。

4. 使用其他命令如“!thread”,“!process”,“!stacks”等来获取更详细的信息,如线程、进程和堆栈信息。

通过分析dump文件中的信息,我们可以确定崩溃的原因。

常见的dump文件分析包括以下几个方面:1. 异常信息分析:通过查看异常代码和异常地址,我们可以了解到底发生了什么类型的异常,以及它是在哪个模块中发生的。

这可以帮助我们锁定问题的范围,并有针对性地解决。

2. 线程堆栈分析:通过查看线程的堆栈信息,我们可以定位到代码中引起问题的具体位置。

Segment Fault(core dump)调试方法

Segment Fault(core dump)调试方法

Coredump关于程序core dump的调试方法简述:首先,在程序不正常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。

使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。

这个能给debug带来极大方便。

查看core dump位置方法:"gdb ./app core".故,我们需要gdb,可执行文件app,以及core文件。

下面将根据这3个需求,依次得到它们;一、1,得到gdb;其实这个是最简单的,Linux PC上gdb不用说了。

Android的是~/opt/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/b in/arm-linux-androideabi-gdb(其中~/opt/,与个人设置有关;android-ndk-r7与编译器版本有关,貌似android-ndk-r4没有toolchains目录,不知是否可以用gdbserver调试程序,当然这就不在本文档的讨论范围之内了).2,得到可执行文件app由于要使用gdb,所以app必须是"not stripped".Linux PC上"gcc hello.c"编译出来的a.out默认就是"not stripped".Android工程中jni目录下,我们使用"ndk-build"默认是"stripped"的。

因此需要更改编译脚本:在~/opt/android-ndk-r7/build/core/中打开default-build-commands.mk文件,将"cmd-strip = $(PRIVATE_STRIP) --strip-unneeded $(call host-path,$1)"这一行注释掉.这一行就是做的"strip"操作。

有关aio引起AIX宕机的core_dump分析

有关aio引起AIX宕机的core_dump分析

有关aio引起AIX宕机的core_dump分析2008.03.27前些日子,客户的S7A主机发生了几次宕机,产生了CORE_DUMP文件,下面是利用crash命令分析宕机原因的过程pwd/# hostnames7a01# cd /var/adm/ras# ls -l 查看core文件名称total 395133-rw-rw-r-- 1 root system 4226 Apr 02 2003 BosMenus.log-rw-r--r-- 1 root system 2 Jan 07 2000 SRCSemID-rw------- 1 root system 8192 May 20 13:35 bootlog-rw-r--r-- 1 root system 8388 Apr 02 2003 bosinst.data-rw-rw-r-- 1 root system 16384 Apr 02 2003 bosinstlog--w------- 1 root system 2 May 16 15:47 bounds-rw-r--r-- 1 bin bin 197206 Jan 01 1970 codepoint.cat-rw--w--w- 1 root system 16384 May 20 15:52 conslog--w------- 1 root system 21 May 16 15:47 copyfilename-rw-r--r-- 1 root system 57078 Apr 02 2003 devinst.log-rw-r--r-- 1 root system 83319 May 20 14:00 diag_log-rw------- 1 root system 8192 May 16 15:49 dumpsymplog-rw-r--r-- 1 root system 151552 May 20 15:52 errlog-rw-r--r-- 1 root system 151552 Apr 22 2004 errlog0422.log-r--r--r-- 1 bin bin 103968 Jan 07 2000 errtmplt-rw-r--r-- 1 root system 7949 Apr 02 2003 image.data-rw-r--r-- 1 root system 8192 May 20 13:21 nimlog-rw-rw-rw- 1 root system 1334264 Jan 20 2000 trcfile-rw------- 1 root system 200136704 May 16 15:47 vmcore.0# crash vmcore.0 开打vmcore.0文件Using /unix as the default namelist file.2 dump routines failed. The following were recorded:0x0141cbe8 failed with rc=140x01422764 failed with rc=14> stat 查看宕机时的状态sysname: AIXnodename: s7a01release: 3version: 4machine: 000AAD014C00time of crash: Tue May 16 15:05:18 TAIST 2006age of system: 22 hr., 51 min.xmalloc debug: disabledabend code: 300 查看错误代码,这个代码很关键csa: 0x2ff3b400exception struct:dar: 0x00000000dsisr: 0x00000000:srv: 0x00000000dar2: 0x00000000dsirr: 0x00000000: (errno) "Error 0"> trace -mSkipping first MSTMST STACK TRACE:0x2ff3b400 (excpt=00000004:0a000000:00000000:00000004:00000106) (intpri=11) IAR: .compare_and_swap+2c (0000a4ec): stw r9,0x0(r4)LR: .[aiopin:untie_knot]+a8 (0143d7a8)2ff3a2e0: .[aio.ext:qlioreq]+b0 (014376ec)2ff3a340: .[aio.ext:listio]+128 (01438f5c)2ff3b3c0: .sys_call_ret+0 (00003a6c)0001113a: lasttocentry+fead9 (00348001)0452-771: Cannot read return address at address 0x01892c0b.> le 0000a4ecNo loader entry found for module address 0x0000a4ecNo loader entry found for module named '0000a4ec'> le 0143d7a8LoadList entry at 0x04ea7980Module *start:0x00000000_0143bef0 Module filesize:0x00000000_0000228cModule *end:0x00000000_0143e17c*data:0x00000000_0143dbe8 data length:0x00000000_00000594Use-count:0x0001 load_count:0x0000 *file:0x00000000flags:0x00000262 TEXT DATAINTEXT DATA DATAEXISTS*exp:0x04ed8000 *lex:0x00000000 *deferred:0x00000000 expsize:0x6e6c732f Name: /usr/lib/drivers/aiopinndepend:0x0001 maxdepend:0x0001*depend[00]:0x05039280*le_next: 04ea7680> le 014376ecLoadList entry at 0x04ea7680Module *start:0x00000000_014348c0 Module filesize:0x00000000_00007624Module *end:0x00000000_0143bee4*data:0x00000000_0143a4c0 data length:0x00000000_00001a24Use-count:0x0003 load_count:0x0001 *file:0x00000000flags:0x00000272 TEXT KERNELEX DATAINTEXT DATA DATAEXISTS*exp:0x051e3000 *lex:0x00000000 *deferred:0x00000000 expsize:0x6c696263 Name: /etc/drivers/aio.extndepend:0x0002 maxdepend:0x0002*depend[00]:0x04ea7980*depend[01]:0x05039280*le_next: 04edb700> le 01438f5cLoadList entry at 0x04ea7680Module *start:0x00000000_014348c0 Module filesize:0x00000000_00007624 Module *end:0x00000000_0143bee4*data:0x00000000_0143a4c0 data length:0x00000000_00001a24Use-count:0x0003 load_count:0x0001 *file:0x00000000flags:0x00000272 TEXT KERNELEX DATAINTEXT DATA DATAEXISTS*exp:0x051e3000 *lex:0x00000000 *deferred:0x00000000 expsize:0x6c696263 Name: /etc/drivers/aio.extndepend:0x0002 maxdepend:0x0002*depend[00]:0x04ea7980*depend[01]:0x05039280*le_next: 04edb700经查,宕机跟Name: /usr/lib/drivers/aiopin有关,> errpt 查看宕机时产生的错误日志LAST ERRORS READ BY ERRDEMON (MOST RECENT LAST):Tue May 16 15:05:18 TAIST: DSI_PROC data storage interrupt : processor Resource Name: SYSVMM0a000000 00000000 00000004 00000086LAST 3 ERRORS READ BY ERRDEMON (MOST RECENT FIRST):> od vmmerrlog 9 rpco proc - 0SLT ST PID PPID PGRP UID EUID TCNT NAME0 a 0 0 0 0 0 1 swapperFLAGS: swapped_in no_swap fixed_pri kprocLinks: *child:0xe20030c0 *siblings:0x00000000 *uinfo:0x50004020(0x0038) *ganchor:0x00000000 *pgrpl:0x00000000 *ttyl:0x00000000Dispatch Fields: pevent:0x00000000 *synch:0xfffffffflock:0x00000000 lock_d:0x00000000Thread Fields: *threadlist:0xe6000000 threadcount:1active:1 suspended:0 local:0 terminating:0Scheduler Fields: fixed pri: 16 repage:0x00000000 scount:0 sched_pri:0 *sched_next:0x00000000 *sched_back:0x00000000 cpticks:3087msgcnt:0 majfltsec:0Misc: adspace:0x0003c00f kstackseg:0x00000000 xstat:0x0000*p_ipc:0x00000000 *p_dblist:0x00000000 *p_dbnext:0x00000000Signal Information:pending:hi 0x00000000,lo 0x00000000sigcatch:hi 0x00000000,lo 0x00000000 sigignore:hi 0xffffffff,lo 0xfff7ffff Statistics: size:0x00000000(pages) audit:0x00000000accounting page frames:0 page space blocks:0Number of virtual pages in use :0pctcpu:0 minflt:1987 majflt:7> thread - 0SLT ST TID PID CPUID POLICY PRI CPU EVENT PROCNAME0 s 3 0 unbound FIFO 10 78 swappert_flags: wakeonsig kthreadLinks: *procp:0xe2000000 *uthreadp:0x2ff3b400 *userp:0x2ff3b6e0 *prevthread:0xe6000000 *nextthread:0xe6000000, *stackp:0x00000000*wchan1(real):0x00000000 *wchan2(VMM):0x00000000 *swchan:0x00000000 wchan1sid:0x00000000 wchan1offset:0x00000000pevent:0x00000000 wevent:0x00000001 *slist:0x00000000Dispatch Fields: *prior:0xe6000000 *next:0xe6000000polevel:0x0000000a ticks:0x0c0f *synch:0xffffffff result:0x00000000*eventlst:0x00000000 *wchan(hashed):0x00000000 suspend:0x0001thread waiting for: event(s)Scheduler Fields: cpuid:0xffffffff scpuid:0xffffffff pri: 16 policy:FIFO affinity:0x0001 affinity_ts:0x3b6e31e cpu:0x0078 run_queue:34a900lpri: 0 wpri:127 time:0x00 sav_pri:0x10Misc: lockcount:0x00000000 ulock:0x00000000 *graphics:0x00000000 dispct:0x00031718 fpuct:0x00000001 boosted:0x0000userdata:0x00000000fsflags: 00000000 adsp_flags: 0000Signal Information: cursig:0x00 *scp:0x00000000pending:hi 0x00000000,lo 0x00000000 sigmask:hi 0x00000000,lo 0x00000000 > q#lslpp -w /usr/lib/drivers/aiopin 查看相关的文件集File Fileset Type----------------------------------------------------------------------------/usr/lib/drivers/aiopin bos.rte.aio File# lslpp -ah bos.rte.aio 查看这个文件集的版本为4.3.3.1Fileset Level Action Status Date Time----------------------------------------------------------------------------Path: /usr/lib/objreposbos.rte.aio4.3.3.0 COMMIT COMPLETE 01/01/70 08:29:524.3.3.1 COMMIT COMPLETE 01/07/00 09:57:114.3.3.1 APPLY COMPLETE 01/07/00 09:55:52Path: /etc/objreposbos.rte.aio4.3.3.0 COMMIT COMPLETE 01/01/70 08:29:524.3.3.1 COMMIT COMPLETE 01/07/00 09:57:114.3.3.1 APPLY COMPLETE 01/07/00 09:55:53经查,宕机跟bos.rte.aio有关,在IBM网站上查到如下内容IY05599: AIO CRASH IN COMPARE_AND_SWAP 00/01/14 PTF PECHANGE APAR statusClosed as program error.Error descriptionWhen the parameter passed to the compare_and_swap() expectedto be a pointer to an integer, but the code passed an integer.I/O on this address (small integer) caused the system crashedwith DSI.Local fixProblem summary*************************************************************** *USERS AFFECTED: ** All users with the following filesets at these levels ** bos.rte.aio 4.3.3.1.*************************************************************** *PROBLEM DESCRIPTION: ** When the parameter passed to the compare_and_swap()* expected to be a pointer to an integer, but the code* passed an integer. I/O on this address (small* integer) caused the system crashed with DSI.*************************************************************** *RECOMMENDATION: ** Apply apar IY05599*************************************************************** Problem conclusionCorrected the parameter passed to compare_and_swap calls.Temporary fixCommentsAPAR informationAPAR number IY05599Reported component name AIX 4.3.0Reported component ID 5765C3403Reported release 430Status CLOSED PERPE YesPEHIPER NoHIPERSubmitted date 1999-11-02Closed date 1999-11-08Last modified date 2000-10-17APAR is sysrouted FROM one or more of the following:APAR is sysrouted TO one or more of the following:Fix informationFixed component name AIX 4.3.0Fixed component ID 5765C3403Applicable component levelsR430 PSY U467596 UP99/12/21 I 1000现在确定,这台机器需要打相关补丁才能彻底解决宕机.。

打开系统coredump及其配置

打开系统coredump及其配置

打开系统coredump及其配置打开系统core dump及其配置core dump在应用crash掉之后对问题的诊断是很有帮助的。

而在默认安装的时候core dump是关闭状态的。

问题一:如何查看系统是否打开了core dump使用【ulimit -c】查看core dump是否打开。

如果结果为0,则表示此功能处于关闭状态,不会生成core文件问题二:如何打开core dump方法一:命令行方式【ulimit -c 1024】,在这个例子中打开了core dump 同时限制文件大小为1024k,现在的程序占用内存都比较凶猛,以前写C程序需要计算内存的时代已经过去了。

如果不加限制,可能一个core文件,几个G 就出去了~,当然没有限制的方式还是有的【ulimit -c unlimited】方法二:配置profile文件,打开/etc/profile文件,在里面可以找到【ulimit -S -c 0 > /dev/null 2>&1】,将它改成【ulimit -S -c unlimited > /dev/null 2>&1】方法三:修改/etc/security/limits.conf文件,添加【* soft core 0】,这个方法可以针对指定用户或用户组打开core dump【user soft core 0或@group soft core 0】。

不过要使用这个方法一定要将方法二提到的那行注释掉,不可同时存在问题三:如何查看core文件的保存路径和文件名格式默认情况下,在打开core后,如果应用发生crash,那么会在应用所在位置,产生一个core.【应用pid】的文件,文件名的可读性不高,管理也不方便。

查看正在使用的core文件路径和格式【more /proc/sys/kernel/core_pattern】后面自动添加pid的配置是在【more /proc/sys/kernel/core_uses_pid】里面配置的,如果为1就是自动添加问题四:如何修改core 文件的保存路径和文件名格式修改/etc/sysctl.conf 文件【vi /etc/sysctl.conf 】,添加需要保存的路径【kernel.core_pattern = /tmp/corefile/core.%e.%t 】,需要注意的是该路径必须应用有写的权限,不然core 文件是不会生成的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/developerworks/cn/aix/library/0806_chench_core/ (1 of 13)2010-5-2 17:04:24
AIX 下的 core dump 分析入门
结合 core 文件以及可执行程序,来分析问题所在。
注:由于进程信号处理本质上是异步的,应用进程注册的信号处理函数中使用的例程需要保证 是异步信号安全的,例如不能使用诸如 pthread_ 开头的例程。
正常的收集过程应该如下 :
snap core 收集过程
# snapcore ./core ./a.out Core file "./core" created by "a.out" pass1() in progress ....
Calculating space required . Total space required is 14130 kbytes .. Checking for available space ... Available space is 807572 kbytes pass1 complete. pass2() in progress .... Collecting fileset information . Collecting error report of CORE_DUMP errors .. Creating readme file .. Creating archive file ... Compressing archive file .... pass2 completed. Snapcore completed successfully. Archive created in /tmp/snapcore. # cd /tmp/snapcore
系统 dump 一般可以通过升级微码、提高系统补丁级别、升级驱动等方式解决。
应用进程 core dump 分析
回页首
上一章我们介绍了 core dump 产生的基本原理。本章我们将针对 AIX 操作系统,介绍 core dump 定位相关的背景知识。
环境变量设置
可以通过 /etc/security/limits 文件对各用户的基本配置参数包括 core 大小进行限制。或者通过 ulimit 更改当前环境下的 core 大小限制。
生成过程
进程 core dump 与系统 dump 的产生,从程序原理上来说是基本一致的。dump 的生成一般是 在系统进行中断处理时进行的,下面简单介绍一下中断机制。
操作系统的中断机制
操作系统是由中断驱动的。广义的中断一般分为两类,中断 (Interrupts) 和异常 (Exceptions)。 中断可在任何时候发生,与 CPU 正在执行什么指令无关,中断主要由 I/O 设备、处理器时钟 (分时系统依赖时钟中断划分时间片)或定时器等硬件引发,可以被允许或取消。而异常是由 于 CPU 执行了某些指令引起的,可以包括存储器存取违规、除 0 或者特定调试指令等,内核 也将系统服务视为异常。系统对这两类中断的处理基本上是相同的。
可以使用 errpt -a 查看标识 C0AA5338 SYSDUMP(系统 core)、B6048838 CORE_DUMP (进程 core)的详细错误信息,获取生成 core 的进程以及 core 文件位置。使用 snap –ac 收 集系统的 dump 信息。
core dump 信息收集
如果可能 , 直接在发生 coredump 的机器上用 dbx 分析出结果 , 这样是最方便的分析方法 . 这 种情况下注意不要直接以 root 用户登录然后用 dbx 分析 , 而必须在应用程序所属的用户下进行 此操作 , 因为 core 可能需要依赖应用程序运行时对应环境下的某些库 , 这样就要借助应用程序 的环境变量 .
初步分析
#dbx <program name> core
示例:
# dbx ./test core Type 'help' for help. warning: The core file is not a fullcore. Some info may not be available. [using memory image in core] reading symbolic information ...warning: no source compiled with -g
默认情况下,应用进程生成 core dump 时都使用文件名 core。为了避免同一工作目录下的进 程 core 相互覆盖,可以定义环境变量 CORE_NAMING=true,然后启动进程,这样将生成名 为 core.pid.ddhhmmss 的文件。可以使用 file core 命令查看 core 是哪个进程产生的。
系统 dump 生成过程
系统异常 dump 的具体过程与应用进程类似,但由于更接近底层,为了避免问题所在的资源 (例如文件系统)正好包含在生成 dump 需要使用的资源中,造成 dump 无法生成,操作系统 一般会用最简单的方式来生成 dump。例如系统内存小于 4G 的情况下,一般直接将 dump 生 成在 pagingspace 中;大于 4G 时,会建专门的 lg_dumplv 逻辑卷(裸设备)保存 dump 信 息。在系统重启的时候,如果设置的 DUMP 转存目录(文件系统中的目录)有足够空间,它将 会转存成一个文件系统文件,缺省情况下,是 /var/adm/ras/ 下的 vmcore* 这样的文件。
AIX 下的 core dump 分析入门
}
寻找 core dump
应用进程的 core 产生在其当前工作目录下,可以在应用程序内部使用 chdir 函数切换当前工作 目录。使用 procwdx 命令可以查看进程的当前工作目录。系统的 core 生成在 lg_dumplv 下, 并在重启时转移到 /var/adm/ras/ 目录下(如果有足够空间的话,否则继续保留在 lg_dumplv, 并随时有可能被覆盖)。
fullcore 设置示例
//test.C #include <iostream> #include <signal.h>
int main(int argc, char* argv[]) {
char str[10]; struct sigaction s; s.sa_handler = SIG_DFL; s.sa_mask.losigs = 0; s.sa_mask.hisigs = 0; s.sa_flags = SA_FULLDUMP; sigaction(SIGSEGV,&s,(struct sigaction *) NULL);
默认情况下,应用进程 dump 时会包含所有的共享内存,如果 dump 时想排除共享内存内容, 可以在启动进程之前设置环境变量 CORE_NOSHM=true.
系统有一个参数 fullcore 用于控制是否在程序 coredump 时生成完整的 core。为避免信息丢 失,建议打开 fullcore。可以使用 lsattr –El sys0 查询是否将 fullcore 打开,使用 chdev -l sys0 -a fullcore=true 将 fullcore 状态更改为打开。也可以在程序内部调用 sigaction 例程设置 fullcore,参考如下测试程序:
std::cout << " input str!\n" << std::endl; std::cin >> str; return 0;
/developerworks/cn/aix/library/0806_chench_core/ (2 of 13)2010-5-2 17:04:24
进程 coredump 的时候,操作系统会将进程终止并释放其占用的资源,正常情况下,应用进程 coredump 不会对系统本身的运行造成危害。当然如果系统中存在与此进程相关的其他进程, 则这些进程会受到影响,至于后果则视其对此异常的具体处理而定。
由于相关指令已经包含在可执行文件中,core 文件一般只包含进程异常时相关的内存信息。其 格式可参考 /usr/include/sys/core.h 或者 AIX 帮助文档的“Files Reference”章节。我们一般需要
如果需取回生产机上的 core 信息在实验室分析 , 则需要搜集一些相关信息 . 进程 core 分析一 般至少需要依赖应用可执行程序,有时还需要包括一些运行时动态库信息。如果需要收集 core 相关的完整信息,可运行 snapcore <core 路径以及名称 > < 可执行文件以及名称 >,例如 snapcore ./core ./a.out,然后在 /tmp/snapcore 下取下相应的 .pax.Z 文件。
使用 dbx 分析 core dump 的例子
dbx 是 AIX 下基于命令行界面的源码级调试工具。本文档只提供一些基本的 dbx 分析指令,详 细内容请参考“General Programming Concepts: Writing and Debugging Programs”关于 dbx 的 描述。
AIX 下的 core dump 分析入门
中国 [选择] 使用条款
首页
产品
服务与解决方案
dW •••• 支持与下载
个性化服务
developerWorks 中国 本文内容包括:
Core dump 基本知识 应用进程 core dump 分 析 系统 dump 分析 总结 参考资料 关于作者 对本文的评价
每个中断都会唯一对应到一个中断处理程序,在该中断触发时,相应的处理程序就会被执行。 例如应用进程进行系统调用时,就会触发一个软件异常,进入中断处理函数,完成从用户态到 系统态的迁移并进入相应系统调用的入口点。应用进程 coredump 也是一个类似的过程。
相关文档
最新文档