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

Joey Lynch commented on CASSANDRA-15214:
----------------------------------------

Quick update on this from the jvmquake side we are now building [architecture 
specific artifacts|https://github.com/Netflix-Skunkworks/jvmquake/releases] 
that will work with any JVM newer than Java 8, they link only against the 
platform specific libc (we're also now testing on Java 8 and 11, on both zulu 
and openjdk JVMs). I think this means it would be plausible to include the 
{{libjvmquake-linux-x86_64.so}} in {{libs}} and then have a switch on uname -s 
-m to determine to pick it up or not. Right now we're only building for linux 
amd64 but if there is interest I can generate more architectures (linux arm 
probably makes sense, and could do osx). I also still like the idea of having a 
agents/available and agents/enabled folder like apache does for modules, users 
can just symlink agents from one to the other to include them (and we can 
symlink jamm and jvmquake by default).

[~yifanc] I agree that the OutOfMemory conditions that do not result in "true" 
JVM OOM (meaning that it would cause a heapdump via {{HeapDumpOnOutOfMemory}}) 
will not get caught by jvmquake, my testing confirms your findings, although 
the jvmquake GC instability algorithm will still trigger in various real world 
scenarios I've run into.

I feel like the right move mightly be to walk back a small bit of 
CASSANDRA-13006 where we stopped forcibly killing the JVM ourselves and let the 
JVM do it. Specifically if the OOM message contains "Direct buffer memory" we 
could do what jvmquake does and force the JVM into a "normal" OOM by 
[allocating large long 
arrays|https://github.com/Netflix-Skunkworks/jvmquake/blob/master/src/jvmquake.c#L103].
 This will then trigger a proper OOM and get us heap dumping. It's relatively 
easy to ignore the "sacrificial" long array in a heap dump and we could log 
clearly what is happening.

> OOMs caught and not rethrown
> ----------------------------
>
>                 Key: CASSANDRA-15214
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15214
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Messaging/Client, Messaging/Internode
>            Reporter: Benedict Elliott Smith
>            Priority: Normal
>             Fix For: 4.0, 4.0-rc
>
>         Attachments: oom-experiments.zip
>
>
> Netty (at least, and perhaps elsewhere in Executors) catches all exceptions, 
> so presently there is no way to ensure that an OOM reaches the JVM handler to 
> trigger a crash/heapdump.
> It may be that the simplest most consistent way to do this would be to have a 
> single thread spawned at startup that waits for any exceptions we must 
> propagate to the Runtime.
> We could probably submit a patch upstream to Netty, but for a guaranteed 
> future proof approach, it may be worth paying the cost of a single thread.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to