Java 设置“后无法生成系统核心转储”;ulimit-c unlimited“;
我正在运行:Red Hat Enterprise Linux Server 6.3版(圣地亚哥) 错误:无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动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
$ 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。一旦我重新启动了启动器,它就正确地生成了核心文件。