RFR: 8368551: Core dump warning may be confusing
David Holmes
dholmes at openjdk.org
Tue Nov 18 07:07:08 UTC 2025
On Tue, 18 Nov 2025 07:02:15 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Hi all,
>>
>> The `os::check_core_dump_prerequisites` function is used to build the strings of 1) warnings if `CreateCoredumpOnCrash` is specified explicitly and some prerequisite is not fulfilled (fully), and 2) the location of the dump when the VM aborts on error.
>>
>> This is fine for many cases, but there are some edgecases on POSIX systems where the warning makes little sense. For example, as reported in the issue:
>>> OpenJDK 64-Bit Server VM warning: CreateCoredumpOnCrash specified, but /shared/cores/core-%e-585191 (max size 0 k). To ensure a full core dump, try "ulimit -c unlimited" before starting Java again
>>
>> This PR refactors overhauls some of these edge cases to ensure that the warning messages and core locations are more clear and user-friendly.
>>
>> **Scenario 1: `CreateCoredumpOnCrash` is disabled**
>>> #
>>> # A fatal error has been detected by the Java Runtime Environment:
>>> # [...]
>>> # CreateCoredumpOnCrash turned off, no core file dumped
>>
>> **Scenario 2: `get_core_path` errors**
>>> Java HotSpot(TM) 64-Bit Server VM warning: CreateCoredumpOnCrash specified, but core path is unknown, trying core.1552174 (may not exist)
>>> #
>>> # A fatal error has been detected by the Java Runtime Environment:
>>> # [...]
>>> # Core dump will be written. Default location: core.1552174 (may not exist)
>>
>> **Scenario 3: the user processes core dump with e.g. `systemd-coredump`**
>>> Java HotSpot(TM) 64-Bit Server VM warning: CreateCoredumpOnCrash specified, but core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" (or dumping to /home/opc/betterCoreMsg/core.1555400)
>>> #
>>> # A fatal error has been detected by the Java Runtime Environment:
>>> # [...]
>>> # Core dump will be written. Default location: "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" (or dumping to /home/foo/bar/core.1555400)
>>
>> **Scenario 4: the resource limit for core dumps could not be determined**
>>> Java HotSpot(TM) 64-Bit Server VM warning: CreateCoredumpOnCrash specified, but couldn't deduce rlim, trying /tmp/cores/core.%e.1560382.%h.%t (may not exist)
>>> #
>>> # A fatal error has been detected by the Java Runtime Environment:
>>> # [...]
>>> # Core dump will be written. Default location: /tmp/cores/core.%e.1560382.%h.%t (may not exist)
>>
>> **Scenarios 5, 6, 7: ulimit of 0, 1024, and unlimited**
>>> Java HotSpot(TM) 64-Bit Server VM warning: CreateCoredumpOnCrash specified, but core dumps have been disabled. To enable core dumping, try "ulimit -c u...
>
> src/hotspot/os/posix/os_posix.cpp line 132:
>
>> 130: buf.print("core dumps may be processed with ");
>> 131: }
>> 132: buf.print("%s", core_path);
>
> The only thing I don't like here is this part. I know it looks weird to have "Default location: Core dumps may be processed with ..." but I think it is less informative to skip pointing out that this case is not actually a location at all.
Or getting rid of the double negative, I think it is beneficial to always point out that this is not actually a location.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28174#discussion_r2536572730
More information about the hotspot-runtime-dev
mailing list