简体   繁体   English

编年史队列中的SIGSEGV 4.5.19

[英]SIGSEGV in Chronicle Queue 4.5.19

What would cause Chronicle Queue to segfault? 什么会导致编年史队列出现段错误? I assume I've missed a configuration somewhere. 我认为我错过了某个地方的配置。 I have a readOnly Chronicle Queue created like this: 我有一个像这样创建的readOnly编年史队列:

ChronicleQueue readQueue =  SingleChronicleQueueBuilder.binary (readBasePath).readOnly (true).build ();

The JVM segfaulted 2016-12-31T00:00:00, which is when I assume the queue file was cycled. JVM segfaulted 2016-12-31T00:00:00,这是我假设队列文件被循环的时候。 This is the environment: 这是环境:

Chronicle Queue 4.5.19 JVM OpenJDK 1.8.0_112-b16 Ubuntu 14.04.3 LTS Linux 3.13.0-74 编年史队列4.5.19 JVM OpenJDK 1.8.0_112-b16 Ubuntu 14.04.3 LTS Linux 3.13.0-74

Here is the stacktrace: 这是堆栈跟踪:

> V  [libjvm.so+0xa08d97]  
J 875  sun.misc.Unsafe.compareAndSwapInt(Ljava/lang/Object;JII)Z (0 bytes) @ 0x00007fde1d328c46 [0x00007fde1d328b80+0xc6]
j  net.openhft.chronicle.core.UnsafeMemory.compareAndSwapInt(JII)Z+8
j  net.openhft.chronicle.bytes.NativeBytesStore.compareAndSwapInt(JII)Z+17
j  net.openhft.chronicle.bytes.AbstractBytes.compareAndSwapInt(JII)Z+16
j  net.openhft.chronicle.wire.AbstractWire.writeEndOfWire(JLjava/util/concurrent/TimeUnit;J)V+32
j  net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.writeEOF(Lnet/openhft/chronicle/wire/Wire;J)V+9
j  net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(ZLnet/openhft/chronicle/bytes/Bytes;)Z+43
j  net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(Z)Z+176
j  net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.next(Z)Z+12
j  net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.readingDocument(Z)Lnet/openhft/chronicle/wire/DocumentContext;+6
j  net.openhft.chronicle.queue.ExcerptTailer.readingDocument()Lnet/openhft/chronicle/wire/DocumentContext;+2
j  net.openhft.chronicle.wire.MarshallableIn.readDocument(Lnet/openhft/chronicle/wire/ReadMarshallable;)Z+1

That looks like a race condition. 看起来像是比赛条件。 When a memory mapping is truly freed it cannot be accessed or it will trigger a segmentation fault. 真正释放内存映射后,将无法访问它,否则将触发分段错误。 The reason I suspect this is that it should be free on a roll from one cycle to the next. 我怀疑这是因为它应该从一个周期到下一个周期自由滚动。

I have added an issue https://github.com/OpenHFT/Chronicle-Queue/issues/319 我添加了一个问题https://github.com/OpenHFT/Chronicle-Queue/issues/319

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM