在AIX系统中,经常会看到文件名为core的文件,这个文件有用处吗?如果有用,怎么使用?

来源:互联网 发布:移动网络玩守望 编辑:程序博客网 时间:2024/06/11 14:56

 

在AIX系统中,经常会看到文件名为core的文件,这个文件有用处吗?如果有用,怎么使用?
2008-11-14 08:13

当进程在异常终止运行时,系统会把该进程对应的地址空间中的数据写到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。查看整个系统的core设置,命令是lscore –d 用chcore命令修改当前用户的core设置,例如: $ chcore –c on –p on –l /tmp/coredir –n on

上面的命令修改当前用户的core设置,-c on参数的作用是打开压缩core文件功能,用户可以用uncompress命令来解压缩,-p on参数的作用是打开指定的core文件位置,保存core文件的目录是由-l参数指定为/tmp/coredir目录,-n on参数的作用相当于把CORE_NAMING环境变量值设置为yes。其中on表示打开这些功能,将on换成off表示关闭这些功能。

如果要修改指定用户的core设置,在上面的命令最后加上用户名,要修改整个系统的core设置,在上面的命令最后加上-d即可。其实每个用户的core设置保存在/etc/security/user文件中,chcore和lscore命令存取user文件的内容,读者可以参考user文件的内容用vi来设置某个用户的core设置。

每一个core dump会产生一个新的错误日志记录。用errpt命令查看这样的错误日志记录可以帮助程序员识别导致core dump的应用程序。程序员可以用dbx命令来调试产生core文件的程序,要用dbx命令调试有问题的程序时,必须保证core文件和产生core文件的程序都在当前目录下,调试程序的最简单的命令格式如下:

$ dbx ProgramFile CoreFile

ProgramFile是程序文件名,CoreFile是core文件名。在dbx中用where子命令可以查看程序在异常终止时正在执行的函数名,也就是说能够查看程序在执行哪个函数时而异常终止的,然后在源程序中找这个函数,再进一步定位异常语句。dbx命令的详细用法读者可以参考dbx命令的手册。

当一个进程正在运行时,如果程序员想获得这个进程所占内存空间中的内容,可以用gencore命令把这个进程对应的地址空间中的数据写到一个指定的文件中,gencore命令并不会终止进程的运行。例如要把进程号为3682983的进程的内存镜像写到文件名为/tmp/core. 3682983的文件中,命令如下:

$ gencore 3682983 /tmp/core.3682983

如果gencore命令指定的core文件名带有路径,那么用chcore命令所修改的core设置中core文件名和core文件保存目录就无效了

 

转自:http://hi.baidu.com/mark_tj/blog/item/74ceff1eb8d72ff31bd57684.html

 

其他: 《AIX系统中不产生CORE文件的十大理由》

 IBM的《AIX 下的 core dump 分析入门》

 

如何把CORE文件发给IBM厂家分析?

在AIX下开发程序中,可能会遇到特别的异常,该异常会产生COREDUMP文件。一般情况下,我们可以通过dbx调试器分析到程序中的BUG,但是若我们经过很长时间还是一无所获的话,我们可以收集一下当前机器的信息以及CORE文件的信息,然后打包发给IBM,由他们代为分析。

具体步骤如下:

1、收集当前系统信息:

errpt -a > errpt.out 
lslpp -lc > lslpp.out 
instfix -i > instfix.out 
bootinfo -K > bootinfo.out 
lsattr -El sys0 > lsattr.out 
lsps -s > lsps.out

2、打包以上文件:
tar -cf - *.out | compress -c > sysinfo.tar.Z 

3、收集当前core文件及相关文件:
格式为:snapcore -d save_directory core.001 fullpath_executable 
例子:snapcore -d /tmp/savedir core.001 /usr/java14/jre/bin/java 

4、打包步骤2和步骤3的所有文件为如下格式:
tar -cf xxxxx.byyy.czzz.#.tar sysinfo.tar.Z core.001.Z core-libs.tar.Z optional-files
其中:
xxxxx 为PMR代号;
yyy为分支号;
zzz为国家号;
#为唯一代号。

发送文件前,必须确认发送包中包含以下文件:
  • sysinfo.tar.Z
  • core-libs.tar.Z or snapcore_pid.pax.Z
  • core.001.Z
5、把以上文件发送给IBM,如下:
ftp testcase.boulder.ibm.com 
login: anonymous 
password: user@host.com 
> cd /toibm/aix 
> bin 
> put xxxxx.byyy.czzz.#.tar 
> quit
转自:http://blog.sina.com.cn/s/blog_53401bdf0100fl3r.html