强制让Linux一个程序coredump

转自:http://bencane.com/2011/09/22/kill-creating-a-core-dump/


kill: Creating a core dump

Sometimes when dealing with application problems you run into a point where logs and environmental data just don’t seem to provide you with the exact issue.

For this reason there are many times where a developer may ask you to create a core file for their application. Core files contain a lot of very good information around the application such as process information and the data stored in memory. Sometimes this can be the difference in finding the issue and not finding the issue.

Below are the steps to manually create a core file from a running process.

Before creating a core file you should check your user limits settings to ensure that core files can be created.

[bcane@bcane ~]$ ulimit -c
0

The above setting disables the creation of core files. This setting is a size limit to the core file, if it is 0 then it cannot create a core file. You can also change this setting by running the following.

[bcane@bcane ~]$ ulimit -c unlimited
[bcane@bcane ~]$ ulimit -c
unlimited

It is important that you do this as the user the application runs as and before you start the application in the same session. This setting is inherited by the application, so what ever the ulimit is set as before starting the application is what the ulimit setting will be for the application (unless a start script changes it).

You may also need to edit the /etc/security/limits.conf file to enable the application user to modify this setting as well.

After setting ulimit you can create a core file by using kill -3 which will send the application a SIGQUIT signal.

[bcane@bcane ~]$ firefox &
[1] 6314
[bcane@bcane ~]$ ps -elf | grep firefox
0 S bcane     6314  2113  7  80   0 – 61794 poll_s 11:59 pts/0    00:00:00 /usr/lib/firefox-3.6/firefox
0 S bcane     6348  2113  0  80   0 -  1104 pipe_w 11:59 pts/0    00:00:00 grep —color=auto firefox
[bcane@bcane ~]$ kill -3 6314
[bcane@bcane ~]$ ls -la core.6314
-rw———-. 1 bcane bcane 129515520 Sep 22 11:59 core.6314
[1]+  Quit                    (core dumped) firefox

Some items to watch out for with this is to ensure that the core file does not fill up the filesystem. As you can see in my example the file is 124M and that is because it dumps the memory the application is using to disk as well as other information.

【yasi】

先确保ulimit -c unlimited是打开的

然后 kill -3 pid

默认生成的coredump文件在程序当前路径下


=======================================


转自:http://www.cppblog.com/kongque/archive/2011/03/07/141262.aspx


linux下生成core dump文件方法及设置
core dump的概念:

core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed). In practice, other key pieces of program state are usually dumped at the same time, including the processor registers, which may include the program counter and stack pointer, memory management information, and other processor and operating system flags and information. The name comes from the once-standard memory technology core memory. Core dumps are often used to diagnose or debug errors in computer programs.

On many operating systems, a fatal error in a program automatically triggers a core dump, and by extension the phrase "to dump core" has come to mean, in many cases, any fatal error, regardless of whether a record of the program memory is created.


在linux平台下,设置core dump文件生成的方法:

1) 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。

2) 使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 1024

3) 默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid

4) 通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern


你可能感兴趣的:(强制让Linux一个程序coredump)