RFR: 8359706: Add file descriptor count to VM.info [v8]
Thomas Stuefe
stuefe at openjdk.org
Thu Jan 29 09:50:30 UTC 2026
On Tue, 20 Jan 2026 19:53:41 GMT, Kieran Farrell <kfarrell at openjdk.org> wrote:
>> Currently, it is only possible to read the number of open file descriptors of a Java process via the `UnixOperatingSystemMXBean` which is only accessible via JMX enabled tools. To improve servicability, it would be benifical to be able to view this information from jcmd VM.info output or hs_err_pid crash logs. This could help diagnose resource exhaustion and troubleshoot "too many open files" errors in Java processes on Unix platforms.
>>
>> This PR adds reporting the current open file descriptor count to both jcmd VM.info output or hs_err_pid crash logs by refactoring the native JNI logic from `Java_com_sun_management_internal_OperatingSystemImpl_getOpenFileDescriptorCount0` of the `UnixOperatingSystemMXBean` into hotspot. Apple's API for retrieving open file descriptor count provides an array of the actual FDs to determine the count. To avoid using `malloc` to store this array in a potential signal handling context where stack space may be limited, the apple implementation instead allocates a fixed 32KB struct on the stack to store the open FDs and only reports the result if the struct is less than the max (1024 FDs). This should cover the majoirty of use cases.
>
> Kieran Farrell has updated the pull request incrementally with one additional commit since the last revision:
>
> minor updates
Sorry for the long delay.
Can you please add some jtreg test for this? The simplest way would be to extend test/jdk/sun/tools/jcmd/TestJcmdSanity.java. See testJcmdPidVMinfo.
Please test that the output shows the parameter "END." at the end (indicating that the printout did not time out).
And please test, on Mac and Linux, that we see "Open File Descriptors: \\d+". (you can just use Platform.isxxx to exclude other platforms).
Thanks!
src/hotspot/os/bsd/os_bsd.cpp line 2617:
> 2615: st->print_cr("Open File Descriptors: unknown");
> 2616: #endif
> 2617: }
stray newline
src/hotspot/os/linux/os_linux.cpp line 5412:
> 5410: timed_out = true;
> 5411: break;
> 5412: }
Can you please do a little manual test like this:
if (fds > some number) sleep(Timeout * 2);
and check if the timeout works?
-------------
PR Review: https://git.openjdk.org/jdk/pull/27971#pullrequestreview-3721621599
PR Review Comment: https://git.openjdk.org/jdk/pull/27971#discussion_r2740752734
PR Review Comment: https://git.openjdk.org/jdk/pull/27971#discussion_r2740765861
More information about the hotspot-dev
mailing list