[ 
https://issues.apache.org/jira/browse/IGNITE-6171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16255304#comment-16255304
 ] 

Vladimir Ozerov edited comment on IGNITE-6171 at 11/16/17 1:30 PM:
-------------------------------------------------------------------

[~cyberdemon], the very problem with this approach is that we observe GC pause 
_after_ it is finished. This is fine to log max GC pause somewhere and show a 
kind of "red flag" to the user. But we cannot react to this pause anyhow. To 
the constrast, solution with native threads will allow to shutdown unresponsive 
node _during_ GC pause. This was the original idea. 

But the question is - does original idea makes sense? Do we really want to 
shutdown the node due to long GC pause? This needs to be discussed separately.


was (Author: vozerov):
[~cyberdemon], the very problem with this approach is that we observe GC pause 
_after_ it finished. This is fine to log max GC pause somewhere and show a kind 
of "red flag" to the user. But we cannot react to this pause anyhow. To the 
constrast, solution with native threads will allow to shutdown unresponsive 
node _during_ GC pause. This was the original idea. 

But the question is - does original idea makes sense? Do we really want to 
shutdown the node due to long GC pause? This needs to be discussed separately.

> Native facility to control excessive GC pauses
> ----------------------------------------------
>
>                 Key: IGNITE-6171
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6171
>             Project: Ignite
>          Issue Type: Task
>          Components: general
>            Reporter: Vladimir Ozerov
>            Assignee: Dmitriy Sorokin
>              Labels: iep-7, usability
>
> Ignite is Java-based application. If node experiences long GC pauses it may 
> negatively affect other nodes. We need to find a way to detect long GC pauses 
> within the process and trigger some actions in response, e.g. node stop. 
> This is a kind of Inception \[1\], when you need to understand that you sleep 
> while sleeping. As all Java threads are blocked on safepoint, we cannot use 
> Java's thread to detect Java's GC. Native threads should be used instead.
> Proposed solution:
> 1) Thread 1 should periodically call dummy JNI method returning current time, 
> and set this time to shared variable;
> 2) Thread 2 should periodically check that variable. If it has not been 
> changed for some time - most likely we are in GC pause. Once certain 
> threashold is reached - trigger compensating action, whether this is a 
> warning, process kill, or what so ever.
> Justification: crossing native -> Java boundaries involves safepoints. This 
> way Thread 1 will be trapped if STW pause is in progress. Java method cannot 
> be empty, as JVM is smart enough and can deduce it to no-op. 
> \[1\] http://www.imdb.com/title/tt1375666/



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to