mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 03:58:21 +00:00
8368551: Core dump warning may be confusing
Reviewed-by: stuefe, dholmes
This commit is contained in:
parent
4ae2f31f3d
commit
c146805da5
@ -5163,7 +5163,7 @@ int os::get_core_path(char* buffer, size_t bufferSize) {
|
||||
|
||||
if (core_pattern[0] == '|') {
|
||||
written = jio_snprintf(buffer, bufferSize,
|
||||
"\"%s\" (or dumping to %s/core.%d)",
|
||||
"\"%s\" (alternatively, falling back to %s/core.%d)",
|
||||
&core_pattern[1], p, current_process_id());
|
||||
} else if (pid_pos != nullptr) {
|
||||
*pid_pos = '\0';
|
||||
|
||||
@ -108,41 +108,60 @@ size_t os::_os_min_stack_allowed = PTHREAD_STACK_MIN;
|
||||
|
||||
// Check core dump limit and report possible place where core can be found
|
||||
void os::check_core_dump_prerequisites(char* buffer, size_t bufferSize, bool check_only) {
|
||||
stringStream buf(buffer, bufferSize);
|
||||
if (!FLAG_IS_DEFAULT(CreateCoredumpOnCrash) && !CreateCoredumpOnCrash) {
|
||||
jio_snprintf(buffer, bufferSize, "CreateCoredumpOnCrash is disabled from command line");
|
||||
VMError::record_coredump_status(buffer, false);
|
||||
buf.print("CreateCoredumpOnCrash is disabled from command line");
|
||||
VMError::record_coredump_status(buf.freeze(), false);
|
||||
} else {
|
||||
struct rlimit rlim;
|
||||
bool success = true;
|
||||
bool warn = true;
|
||||
char core_path[PATH_MAX];
|
||||
if (get_core_path(core_path, PATH_MAX) <= 0) {
|
||||
jio_snprintf(buffer, bufferSize, "core.%d (may not exist)", current_process_id());
|
||||
// In the warning message, let the user know.
|
||||
if (check_only) {
|
||||
buf.print("the core path couldn't be determined. It commonly defaults to ");
|
||||
}
|
||||
buf.print("core.%d%s", current_process_id(), check_only ? "" : " (may not exist)");
|
||||
#ifdef LINUX
|
||||
} else if (core_path[0] == '"') { // redirect to user process
|
||||
jio_snprintf(buffer, bufferSize, "Core dumps may be processed with %s", core_path);
|
||||
if (check_only) {
|
||||
buf.print("core dumps may be further processed by the following: ");
|
||||
} else {
|
||||
buf.print("Determined by the following: ");
|
||||
}
|
||||
buf.print("%s", core_path);
|
||||
#endif
|
||||
} else if (getrlimit(RLIMIT_CORE, &rlim) != 0) {
|
||||
jio_snprintf(buffer, bufferSize, "%s (may not exist)", core_path);
|
||||
if (check_only) {
|
||||
buf.print("the rlimit couldn't be determined. If resource limits permit, the core dump will be located at ");
|
||||
}
|
||||
buf.print("%s%s", core_path, check_only ? "" : " (may not exist)");
|
||||
} else {
|
||||
switch(rlim.rlim_cur) {
|
||||
case RLIM_INFINITY:
|
||||
jio_snprintf(buffer, bufferSize, "%s", core_path);
|
||||
buf.print("%s", core_path);
|
||||
warn = false;
|
||||
break;
|
||||
case 0:
|
||||
jio_snprintf(buffer, bufferSize, "Core dumps have been disabled. To enable core dumping, try \"ulimit -c unlimited\" before starting Java again");
|
||||
buf.print("%s dumps have been disabled. To enable core dumping, try \"ulimit -c unlimited\" before starting Java again", check_only ? "core" : "Core");
|
||||
success = false;
|
||||
break;
|
||||
default:
|
||||
jio_snprintf(buffer, bufferSize, "%s (max size " UINT64_FORMAT " k). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", core_path, uint64_t(rlim.rlim_cur) / K);
|
||||
if (check_only) {
|
||||
buf.print("core dumps are constrained ");
|
||||
} else {
|
||||
buf.print( "%s ", core_path);
|
||||
}
|
||||
buf.print( "(max size " UINT64_FORMAT " k). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", uint64_t(rlim.rlim_cur) / K);
|
||||
break;
|
||||
}
|
||||
}
|
||||
const char* result = buf.freeze();
|
||||
if (!check_only) {
|
||||
VMError::record_coredump_status(buffer, success);
|
||||
VMError::record_coredump_status(result, success);
|
||||
} else if (warn) {
|
||||
warning("CreateCoredumpOnCrash specified, but %s", buffer);
|
||||
warning("CreateCoredumpOnCrash specified, but %s", result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -72,8 +72,8 @@ public class TestCrashOnOutOfMemoryError {
|
||||
#
|
||||
# JRE version: OpenJDK Runtime Environment (9.0) (build 1.9.0-internal-debug-cheleswer_2015_10_20_14_32-b00)
|
||||
# Java VM: OpenJDK 64-Bit Server VM (1.9.0-internal-debug-cheleswer_2015_10_20_14_32-b00, mixed mode, tiered, compressed oops, serial gc, linux-amd64)
|
||||
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %P" (or dumping to
|
||||
/home/cheleswer/Desktop/core.6212)
|
||||
# Core dump will be written. Default location: Determined by the following:
|
||||
"/usr/share/apport/apport %p %s %c %P" (alternatively, falling back to /home/cheleswer/Desktop/core.6212)
|
||||
#
|
||||
# An error report file with more information is saved as:
|
||||
# /home/cheleswer/Desktop/hs_err_pid6212.log
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user