Linux系统下使用Coredump时应注意事项

在Linux下要保证程序崩溃时生成Coredump要注意这些问题:

一、要保证存放Coredump的目录存在且进程对该目录有写权限。存放Coredump的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/<进程pid>/cwd“符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。

二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这些进程生成Coredump。很多服务程序都会调用seteuid(),如MySQL,不论你用什么用户运行mysqld_safe启动MySQL,mysqld进行的有效用户始终是msyql用户。如果你当初是以用户A运行了某个程序,但在ps里看到的这个程序的用户却是B的话,那么这些进程就是调用了seteuid了。为了能够让这些进程生成Coredump,需要将/proc/sys/fs/suid_dumpable文件的内容改为1(一般默认是0)。

三、这个一般都知道,就是要设置足够大的Core文件大小限制了。程序崩溃时生成的Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用的内存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。

时间: 2024-09-30 01:01:01

Linux系统下使用Coredump时应注意事项的相关文章

为什么在linux系统下安装QQ的时候出现这种情况?

问题描述 为什么在linux系统下安装QQ的时候出现这种情况? 装入归档文件时出现了一个错误. Archive: /tmp/QQ7.2.exe [/tmp/QQ7.2.exe] End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the centr

linux系统下如何使用assert函数

  linux系统下使用assert函数的方法. 步骤如下: assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息, 然后通过调用 abort 来终止程序运行. 请看下面的程序清单badptr.c: #inc

Linux系统下优秀的代理服务器软件:Squid

作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前Internet上运行的主机有相当一部分采用的就是Linux,而且中国已经把Linux作为政府上网的指定网络操作系统.种种迹象表明,Linux正在逐渐走向成熟. 为了解决Internet发展迅速和IP地址资源紧张的矛盾,代理服务器的使用越来越广泛.Squid是一种在Linux系统下使用的比较优秀的代理服务器软件. 代理服务 代理服务是指由一台拥有标准IP地址的机器代替若干没有标准IP地址的机器和 Internet上的其它主

linux系统下grep egrep fgrep用法以及正则表达式

一.grep.egrep.fgrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法.(注释:文中fg代表例子,) 1.1.基本定义: grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,

Linux系统下无法访问mysql解决方法

  mysql是一个关系型数据库管理系统,但最近有用户反映,在Linux系统下无法访问mysql,相信不少用户都有遇到过这个问题,这是怎么回事呢?Linux系统下无法访问mysql该怎么办呢?下面我们一起来看看解决方法. 1.问题及异常 ThreadPoolAsynchronousRunner - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@75d634ea -- APPARENT DEADLOCK!!!

Linux系统下NTP协议的超级配置攻略

  在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的.Linux系统下,一般使用ntp服务来同步不同机器的时间.NTP 是网络时间协议(Network Time Protocol)的简称,干嘛用的呢?就是通过网络协议使计算机之间的时间同步化. 安装NTP包 检查是否安装了ntp相关包.如果没有安装ntp相关包,使用rpm或yum安装,安装也非常简单方便. 复制代码 代码如下: [root@localhost ~]#

Linux系统下使用U盘的技巧

  一.插入u盘到计算机,如果目前只插入了一个U盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1. 二.在mnt目录下先建立一个u的目录. 三.然后命令提示符#后输入:mount -t vfat /dev/sda1 /mnt/u. 四.卸载时用umount /mnt/u. 这就是最简单的Linux系统下使用U盘的技巧.当然现在的Linux最新发行版都是可以自动识别U盘和加载了,像ubuntu10.04和slitaz3.0,都是自动加载.

Linux系统下卸载USB设备的方法

Linux系统下通常都会自动挂载USB设备,如果没有自动挂载的话就需要自己手动挂载USB设备了,那么Linux下要如何挂载USB设备呢?不需要的时候又要如何卸载呢?一起来了解下吧. 在挂载之前需要确定下列三种信息 1.要挂载对象的文件系统类型 2.要挂载对象的设备名称 3.确定挂载点 挂载时使用mount命令: 格式:mount [-参数] [设备名称] [挂载点] 我们常见的USB设备格式是:FAT32格式.NFTS格式等. ext2 linux目前常用的文件系统 msdos MS-DOS的f

Linux系统下如何使用U盘?

  一.插入u盘到计算机,如果目前只插入了一个U盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1. 二.在mnt目录下先建立一个u的目录. 三.然后命令提示符#后输入:mount -t vfat /dev/sda1 /mnt/u. 四.卸载时用umount /mnt/u. 这就是最简单的Linux系统下使用U盘的技巧.当然现在的Linux最新发行版都是可以自动识别U盘和加载了,像ubuntu10.04和slitaz3.0,都是自动加载.