-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8322043: HeapDumper should use parallel dump by default #18748
Conversation
👋 Welcome back amenkov! A progress list of the required criteria for merging this PR into |
@alexmenkov This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 351 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
@alexmenkov The following labels will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
I am curious: what is the memory overhead for parallel mode, and (I am not familiar with the logic) how many threads are involved? Is the number of thread bounded? I ask because, especially for the OnOOM handling, we may already be at a limit memory-wise. Starting to swap will probably be worse than running single-threaded. |
Good question. |
For the OOM case, I would probably make it somehow dependent on os::free_memory() then. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Thanks for doing this!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One nit, otherwise looks good. Thanks
/integrate |
Going to push as commit 0a24dae.
Your commit was automatically rebased without conflicts. |
@alexmenkov Pushed as commit 0a24dae. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
Late to the party here, sorry. Are there motivational performance improvements that we get from enabling parallel heap dumps by default? Asking because JDK-8319650 and JDK-8320924 improved single-threaded heap dump performance drastically, and the I/O looked to be a bottleneck going forward. Would parallel heap dump take more I/O for writing chunks first, and then combining them into large file? Do we know that parallel heap dump still wins a lot? I don't think it does all that much. Here is a simple run using the workload from JDK-8319650 on 10-core machine:
This is less than 2x improvement, even though we took 3 threads to heap dump:
And this is on a fast SSD, where I/O is abundant, and there is plenty of space.
I believe that is because the 2-phase heap dump makes excess work for a single-threaded heap dump. Note that the parallel heap dump in current mainline is not even able to catch up with what we already had with sequential heap dump. So all this together looks like a performance regression. I propose we revert this switch to parallel, fix the sequential heap dump performance, and then reconsider -- with benchmarks -- if we want to switch to parallel. |
Currently heap dump is always performed in 2 phases (even if single threaded heap dump is requested or SerialGC is used). This is required to correctly handle unmounted virtual threads. |
The fix makes VM heap dumping parallel by default.
jcmd GC.heap_dump
andjmap -dump
had parallel dumping by default, the fix affectsHotSpotDiagnosticMXBean.dumpHeap()
,-XX:+HeapDumpBeforeFullGC
,-XX:+HeapDumpAfterFullGC
and-XX:+HeapDumpOnOutOfMemoryError
.Testing:
-Xlog:heapdump
;Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/18748/head:pull/18748
$ git checkout pull/18748
Update a local copy of the PR:
$ git checkout pull/18748
$ git pull https://git.openjdk.org/jdk.git pull/18748/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 18748
View PR using the GUI difftool:
$ git pr show -t 18748
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/18748.diff
Webrev
Link to Webrev Comment