[英]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.