cassandra-commits mailing list archives

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


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:

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

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:
>             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 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

View raw message