2012-11-15 61 views
11

我正在运行一个程序,并且它被分割故障中断。问题是核心转储文件被创建,但大小为零。分割故障后空核心转储文件

您是否听说过这种情况以及如何解决?

我在磁盘上有足够的空间。我已经执行ulimit -c unlimited来限制核心文件的大小 - 无论是运行它还是放在提交的批处理文件的顶部 - 但仍然有0字节的核心转储文件。包含这些文件的文件夹的权限为uog + rw,创建的核心文件的权限仅为u + rw。

该程序是由C++编写的,并通过qsub命令在Grid Engine上提交,我不知道这个信息与这个问题是否相关。

+0

你假设我在驱动器上有可用空间吗? –

+0

零长度文件的写入权限是什么? – eh9

+0

下一个问题:包含目录的权限是什么?该进程是否在与目录所有者不同的有效用户标识下运行? – eh9

回答

5

这听起来像你正在使用批处理调度程序来启动你的可执行文件。也许Torque/PBS用来产生作业的shell会继承不同的ulimit值?也许调度程序的默认配置不是为了保存核心转储?

你能直接从命令行运行你的程序吗?

或者如果您在调用可执行文件之前将ulimit -c unlimited和/或ulimit -s unlimited添加到您的PBS批处理脚本的顶部,您可能会覆盖PBS的默认ulimit行为。或者添加'ulimit -c'可以报告无论如何限制。

+0

我把'ulimit -c unlimited'和'ulimit -s unlimited'放到了PBS批处理脚本中,但是核心转储仍然是空的! – Ali

+1

你用于转储内核的文件系统是什么? –

6

设置ulimit -c unlimited开启了生成转储。 默认情况下,核心转储是在nfs上的当前目录中生成的。 设置/proc/sys/kernel/core_pattern/tmp/core帮助我解决了空转储问题。

comment from Ranjith Ruban帮助我开发了这种解决方法。

用于转储内核的文件系统是什么?

+0

我刚刚在带有映射到NTFS驱动器(主机的驱动器)的vboxsf文件系统的Linux VirtualBox映像上出现此问题。 –

+0

以root用户创建奇迹的方式修改core_pattern! NFS驱动器路径使核心文件为零字节。 http://stackoverflow.com/a/12760552/999943除了设置创建路径的位置外,还有一些用于更改核心文件命名方式的漂亮语法。 http://www.linuxhowtos.org/Tips%20and%20Tricks/coredump.htm – phyatt

0

您可以设置使用qsub选项,如-l h_vmem=6G到储库6 GB的物理内存所需的资源限制,如物理内存。

对于文件块,您可以将h_fsize设置为适当的值。

见资源限制的qconf手册页的部分:

http://gridscheduler.sourceforge.net/htmlman/htmlman5/queue_conf.html

s_cpu  The per-process CPU time limit in seconds. 

s_core The per-process maximum core file size in bytes. 

s_data The per-process maximum memory limit in bytes. 

s_vmem The same as s_data (if both are set the minimum is 
      used). 
h_cpu  The per-job CPU time limit in seconds. 

h_data The per-job maximum memory limit in bytes. 

h_vmem The same as h_data (if both are set the minimum is 
      used). 

h_fsize The total number of disk blocks that this job can 
      create. 

此外,如果集群使用本地TMPDIR到每个节点,和被填满,可以设置TMPDIR到备用位置与更能力,例如NFS共享:

export TEMPDIR=<some NFS mounted directory> 

然后用-V选项当前环境导出到工作启动qsub

上面的一个或其组合可以帮助您解决问题。

0

如果在装入的驱动器中运行核心文件。核心文件不能写入已安装的驱动器,而必须写入本地驱动器。

您可以将文件复制到本地驱动器。