cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Amichai Rothman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-8812) JVM Crashes on Windows x86
Date Tue, 17 Feb 2015 19:58:12 GMT

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

Amichai Rothman commented on CASSANDRA-8812:
--------------------------------------------

Sure, I just ran it a few more times (with cassandra-all 2.1.2, if any of the line numbers
changed) and got several of these:

{noformat}
2015-02-17 11:35:13,470 | PERIODIC-COMMIT-LOG-SYNCER | o.a.c.d.c.CommitLog | ERROR | CommitLog.java:367
| Failed to persist commits to disk. Commit disk failure policy is stop; terminating thread
org.apache.cassandra.io.FSWriteError: java.io.IOException: The handle is invalid
        at org.apache.cassandra.db.commitlog.CommitLogSegment.sync(CommitLogSegment.java:329)
~[cassandra-all-2.1.2.jar:2.1.2]
        at org.apache.cassandra.db.commitlog.CommitLog.sync(CommitLog.java:195)~[cassandra-all-2.1.2.jar:2.1.2]
        at org.apache.cassandra.db.commitlog.AbstractCommitLogService$1.run(AbstractCommitLogService.java:81)
~[cassandra-all-2.1.2.jar:2.1.2]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_31]
Caused by: java.io.IOException: The handle is invalid
        at java.nio.MappedByteBuffer.force0(Native Method) ~[na:1.8.0_31]
        at java.nio.MappedByteBuffer.force(MappedByteBuffer.java:203) ~[na:1.8.0_31]
        at org.apache.cassandra.db.commitlog.CommitLogSegment.sync(CommitLogSegment.java:315)
~[cassandra-all-2.1.2.jar:2.1.2]
... 3 common frames omitted
{noformat}

However in the past I also got exceptions with an exactly identical stack trace other than
a different IOException message "Attempt to access invalid address" instead of "The handle
is invalid".

> JVM Crashes on Windows x86
> --------------------------
>
>                 Key: CASSANDRA-8812
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8812
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: Windows 7 running x86(32-bit) Oracle JDK 1.8.0_u31
>            Reporter: Amichai Rothman
>            Assignee: Joshua McKenzie
>         Attachments: crashtest.tgz
>
>
> Under Windows (32 or 64 bit) with the 32-bit Oracle JDK, the JVM may crash due to EXCEPTION_ACCESS_VIOLATION.
This happens inconsistently. The attached test project can recreate the crash - sometimes
it works successfully, sometimes there's a Java exception in the log, and sometimes the hotspot
JVM crash shows up (regardless of whether the JUnit test results in success - you can ignore
that). Run it a bunch of times to see the various outcomes. It also contains a sample hotspot
error log.
> Note that both when the Java exception is thrown and when the JVM crashes, the stack
trace is almost the same - they both eventually occur when the PERIODIC-COMMIT-LOG-SYNCER
thread calls CommitLogSegment.sync and accesses the buffer (MappedByteBuffer): if it happens
to be in buffer.force(), then the Java exception is thrown, and if it's in one of the buffer.put()
calls before it, then the JVM crashes. This possibly exposes a JVM bug as well in this case.
So it basically looks like a race condition which results in the buffer sometimes being used
after it is no longer valid.
> I recreated this on a PC with Windows 7 64-bit running the 32-bit Oracle JDK, as well
as on a modern.ie virtualbox image of Windows 7 32-bit running the JDK, and it happens both
with JDK 7 and JDK 8. Also defining an explicit dependency on cassandra 2.1.2 (as opposed
to the cassandra-unit dependency on 2.1.0) doesn't make a difference. At some point in my
testing I've also seen a Java-level exception on Linux, but I can't recreate it at the moment
with this test project, so I can't guarantee it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message