“failed to write core dump”是什么错误?

5
我正在一个拥有64GB内存的服务器上使用Java OpenMPI来对一个大整数数组(长度为10亿)进行排序。但是当我增加数组的长度时,会出现以下错误:
致命错误:Java运行时环境检测到了一个问题: ... 未能编写核心转储文件。核心转储已被禁用。若要启用核心转储,请在再次启动Java之前尝试“ulimit -c无限制”。 什么是核心转储?导致此错误的错误可能是什么?如何解决这个错误?

JVM是用C语言编写的。这似乎是一个用C语言编写的本地函数出了问题,而操作系统没有配置保存转储文件的设置... - Boris Pavlović
这可能意味着JVM认为保留给它的内存实际上并不可用。您确定需要对BigIntegers进行排序吗?因为这比使用“long”或“int”要慢得多,并且使用的内存也更多。我建议尝试减小JVM堆的大小。 - Peter Lawrey
我不是指BigInteger数组,而是一种类型为整数的大数组。@PeterLawrey - user3625605
在这种情况下,您需要至少4 GB,理想情况下为8或12 GB。如果您创建的堆接近于操作系统允许的限制,但稍后发生了一些变化,您可能会有一个过大的堆。尝试使堆不超过主内存的80%,特别是如果您没有大型交换文件空间。 - Peter Lawrey
顺便说一下,如果您不需要出现次数,可以使用几个BitSet来对所有int值进行排序。即只需1/2 GB,就可以预先排序。即O(N)排序时间,而不是O(N log N) - Peter Lawrey
1个回答

4
在Unix术语中,“core dump”、“memory dump”或“system dump”是指记录了计算机程序在特定时间内工作内存的状态,通常是在程序崩溃或异常终止时发生。
请参考Core dump

我认为这个异常是因为Java耗尽了内存。


请参考Java内存耗尽问题

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接