Java 设置“后无法生成系统核心转储”;ulimit-c unlimited“;

Java 设置“后无法生成系统核心转储”;ulimit-c unlimited“;,java,jvm,redhat,core,dump,Java,Jvm,Redhat,Core,Dump,我正在运行:Red Hat Enterprise Linux Server 6.3版(圣地亚哥) 错误:无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited” 将核心文件大小设置为“无限制”,并用以下命令确认设置后: $ ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited sc

我正在运行:Red Hat Enterprise Linux Server 6.3版(圣地亚哥)

错误:无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

将核心文件大小设置为“无限制”,并用以下命令确认设置后:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 773690
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 65536
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
我仍然无法让JVM崩溃创建系统核心转储。。。有什么办法可以防止这种情况发生吗

应该注意的是,如果编写一个有意导致分割错误的C++程序,那么立即生成CORDEMP文件:

#include <signal.h>

int main() {
  raise (SIGSEGV);
}




$ ./crash
Segmentation fault (core dumped)

Produces:

core.43969
#包括
int main(){
升起(SIGSEGV);
}
美元/崩溃
分段故障(堆芯转储)
生产:
核心文件43969

要确认正在运行的java进程的corefile大小不受限制,您需要检查该进程-它可能没有继承ulimit命令,具体取决于java进程的启动方式
$cat/proc/19432/limits | grep-E“Limit | core file size”Limit软限制硬限制单元最大核心文件大小0个无限字节
谢谢ceeaspb,这正是问题所在。软限制仍然设置为0,因为此程序是由另一个程序启动的,该程序在几个月前启动,并且旧的软核限制仍然为0。因此,新程序继承了旧运行程序的软核限制=0。一旦我重新启动了启动器,它就正确地生成了核心文件。