繁体   English   中英

分段错误后清空核心转储文件

[英]Empty core dump file after Segmentation fault

我正在运行一个程序,它被Segmentation fault中断。 问题是核心转储文件已创建,但大小为零。

你听说过这样的案件以及如何解决吗?

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

该程序是由C ++编写的,并使用Grid Engine的qsub命令在linux集群上提交,我不知道这些信息是否与此问题相关。

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

Ranjith Ruban评论帮助我开发了这种解决方法。

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

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

您可以直接从命令行运行程序吗?

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

您可以使用qsub选项(例如-l h_vmem=6G来设置资源限制,例如所需的物理内存,以保留6 GB的物理内存。

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

请参阅qconf联机帮助页的RESOURCE LIMITS部分:

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以将当前环境导出到作业。

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

如果在已装入的驱动器中运行核心文件。核心文件无法写入已装入的驱动器,但必须写入本地驱动器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM