Hello Xiao,

I don't have enough knowledge of this area to provide any insight into the issue. However, just to try and get the discussion started, do you have any sample code of your application which shows how the application uses the ForkJoinPool? More specifically what APIs do you use in the application?

Few other questions inline below.

On 12/01/24 11:30 am, Xiao Yu wrote:
....
Here is the full background. One of our process experienced an OOME and a heap dump was obtained. We know there was a concurrent issue of our system happening on some other machines such that network failure and retries occurred in this process at the same time. Upon analyzing the heap dump, we observed a lot of our network connection handlers being frequently created and terminated which
is expected due to the network failure and retry attempts mentioned above.
However, those terminated handlers are not being GC'ed because of there were
references to tasks submitted to the ForkJoinPool during the connection
attempts. The tasks stayed in the queue until OOME happened as there is no
threads to execute them.

What are these handlers? Are they classes which implement Runnable or are they something else? What does termination of handler mean in this context? Do you use any java.util.concurrent.* APIs to "cancel" such terminated handlers?

Finally, what does the OutOfMemoryError exception stacktrace look like and what is the JVM parameters (heap size for example) used to launch this application?

-Jaikiran

Reply via email to