web-dev-qa-db-ja.com

JVMクラッシュ(SIGSEGV)を解決/デバッグするための最良の方法

私は本当に迷子になっていて、自分の問題に立ち向かい、解決する方法がわかりません。単純なJavaコードがあり、JVMがクラッシュします。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00000001057ce9d4, pid=10727, tid=18947
#
# JRE version: Java(TM) SE Runtime Environment (8.0_73-b02) (build 1.8.0_73-b02)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.73-b02 mixed mode bsd-AMD64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x3ce9d4]  PhaseIdealLoop::idom_no_update(Node*) const+0x12
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.Java.com/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x00007feeef003800):  JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=18947, stack(0x0000700000ec4000,0x0000700000fc4000)]

siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000008

問題を解決する方法がわかりません。プログラムは非常にシンプルで、Kafkaを介してメッセージを受信し、受信したメッセージに基づいてタスクをトリガーします。2つの異なるタスクを追加すると、900〜1,500メッセージ後にプログラムがクラッシュします。すべてのメッセージは同じであり、プログラムはJNIのものを使用しません(私が知る限り、使用されているサードパーティのライブラリはJNIも使用しません)。

私はこの問題に直面したことはありませんが、問題が何であるかを理解する方法を見つけたい/必要があります。私はすでに他のバージョンのJVM(Java 8.0_66、8.0_73-b02、および8.0_74-b02)を使用しました。それで、なにかお手伝いできますか?どうもありがとうございます!

編集(1):時々私はまた次のエラー/情報を受け取ります:

...
# JRE version: Java(TM) SE Runtime Environment (8.0_73-b02) (build 1.8.0_73-b02)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.73-b02 mixed mode bsd-AMD64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x3ce9d4]
...

編集(2):Javaバージョンを8.0_74に更新しました。エラーはまだあります:(。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00000001073cdef8, pid=11227, tid=19715
#
# JRE version: Java(TM) SE Runtime Environment (8.0_74-b02) (build 1.8.0_74-b02)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.74-b02 mixed mode bsd-AMD64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x3cdef8]  PhaseIdealLoop::idom_no_update(Node*) const+0x12
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.Java.com/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x00007f89e481c800):  JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=19715, stack(0x000070000104a000,0x000070000114a000)]

siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000008

編集(3):コアダンプ

それで最後にコアダンプを作成してJava VisualVMにロードしました(jmapを呼び出すと別のエラーが発生するため、DROYによって提示されたソリューションを使用できませんでした: "コアファイルへのアタッチエラー:できませんコアファイルに添付してください」)。VisualVMで作成されたスレッドダンプの結果は次のとおりです。

Thread 30239 "Keep-Alive-Timer": (state = BLOCKED)
    at Java.lang.Thread.sleep(Native Method)
    at Sun.net.www.http.KeepAliveCache.run(KeepAliveCache.Java:172)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 29699 "threadDeathWatcher-4-1": (state = BLOCKED)
    at Java.lang.Thread.sleep(Native Method)
    at io.netty.util.ThreadDeathWatcher$Watcher.run(ThreadDeathWatcher.Java:137)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.Java:137)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 26635 "nioEventLoopGroup-3-1": (state = IN_NATIVE)
    at Sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
    at Sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.Java:198)
    at Sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.Java:117)
    at Sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.Java:86)
    - locked <0x00000006c049ec98> (a io.netty.channel.nio.SelectedSelectionKeySet)
    - locked <0x00000006c049ec88> (a Java.util.Collections$UnmodifiableSet)
    - locked <0x00000006c049ecb8> (a Sun.nio.ch.KQueueSelectorImpl)
    at Sun.nio.ch.SelectorImpl.select(SelectorImpl.Java:97)
    at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.Java:622)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.Java:310)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.Java:110)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.Java:137)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 29187 "pool-3-thread-1": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.park(LockSupport.Java:175)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2039)
    at Java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.Java:442)
    at kafka.consumer.ConsumerIterator.makeNext(ConsumerIterator.scala:63)
    at kafka.consumer.ConsumerIterator.makeNext(ConsumerIterator.scala:33)
    at kafka.utils.IteratorTemplate.maybeComputeNext(IteratorTemplate.scala:66)
    at kafka.utils.IteratorTemplate.hasNext(IteratorTemplate.scala:58)
    at com.sosse.common.messaging.DefaultHandler.doRun(DefaultHandler.Java:22)
    at com.sosse.common.concurrency.DefaultRunnable.run(DefaultRunnable.Java:11)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 28675 "pool-4-thread-1": (state = BLOCKED)
    at Java.lang.Thread.sleep(Native Method)
    at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.Java:461)
    at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.Java:360)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 28163 "ConsumerFetcherThread-analytics-group_Philipp.local-1458441725398-581eabc3-0-0": (state = IN_NATIVE)
    at Sun.nio.ch.Net.poll(Native Method)
    at Sun.nio.ch.SocketChannelImpl.poll(SocketChannelImpl.Java:954)
    - locked <0x00000006c056d538> (a Java.lang.Object)
    at Sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.Java:204)
    - locked <0x00000006c056d5b8> (a Java.lang.Object)
    at Sun.nio.ch.ChannelInputStream.read(ChannelInputStream.Java:103)
    - locked <0x00000006c056d5f8> (a Sun.nio.ch.SocketAdaptor$SocketInputStream)
    at Java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.Java:385)
    - locked <0x00000006c056d618> (a Java.lang.Object)
    at kafka.utils.Utils$.read(Utils.scala:380)
    at kafka.network.BoundedByteBufferReceive.readFrom(BoundedByteBufferReceive.scala:54)
    at kafka.network.Receive$class.readCompletely(Transmission.scala:56)
    at kafka.network.BoundedByteBufferReceive.readCompletely(BoundedByteBufferReceive.scala:29)
    at kafka.network.BlockingChannel.receive(BlockingChannel.scala:111)
    at kafka.consumer.SimpleConsumer.liftedTree1$1(SimpleConsumer.scala:71)
    at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(SimpleConsumer.scala:68)
    - locked <0x00000006c056d6e0> (a Java.lang.Object)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SimpleConsumer.scala:112)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:112)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:112)
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply$mcV$sp(SimpleConsumer.scala:111)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:111)
    at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:111)
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33)
    at kafka.consumer.SimpleConsumer.fetch(SimpleConsumer.scala:110)
    at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:94)
    at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:86)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)

Thread 27651 "analytics-group_Philipp.local-1458441725398-581eabc3-leader-Finder-thread": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.park(LockSupport.Java:175)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2039)
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:61)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)

Thread 27139 "analytics-group_Philipp.local-1458441725398-581eabc3_watcher_executor": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.Java:215)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2163)
    at kafka.consumer.ZookeeperConsumerConnector$ZKRebalancerListener$$anon$1.run(ZookeeperConsumerConnector.scala:544)

Thread 26115 "kafka-consumer-scheduler-0": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.Java:215)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.Java:2078)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:1093)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:809)
    at Java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.Java:1067)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1127)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 25603 "main-EventThread": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.park(LockSupport.Java:175)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2039)
    at Java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.Java:442)
    at org.Apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.Java:494)

Thread 25091 "main-SendThread(localhost:2181)": (state = IN_NATIVE)
    at Sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
    at Sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.Java:198)
    at Sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.Java:117)
    at Sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.Java:86)
    - locked <0x00000006c0022c50> (a Sun.nio.ch.Util$2)
    - locked <0x00000006c0022c60> (a Java.util.Collections$UnmodifiableSet)
    - locked <0x00000006c0022c00> (a Sun.nio.ch.KQueueSelectorImpl)
    at Sun.nio.ch.SelectorImpl.select(SelectorImpl.Java:97)
    at org.Apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.Java:349)
    at org.Apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.Java:1081)

Thread 24579 "ZkClient-EventThread-16-localhost:2181": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.park(LockSupport.Java:175)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2039)
    at Java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.Java:442)
    at org.I0Itec.zkclient.ZkEventThread.run(ZkEventThread.Java:67)

Thread 24067 "metrics-meter-tick-thread-2": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.park(LockSupport.Java:175)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.Java:2039)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:1088)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:809)
    at Java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.Java:1067)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1127)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 23555 "metrics-meter-tick-thread-1": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.Java:215)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.Java:2078)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:1093)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:809)
    at Java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.Java:1067)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1127)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

Thread 23303 "pool-1-thread-1": (state = BLOCKED)
    at Sun.misc.Unsafe.park(Native Method)
    at Java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.Java:215)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.Java:2078)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:1093)
    at Java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.Java:809)
    at Java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.Java:1067)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1127)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)

VM Thread 20995 "Service Thread": (state = BLOCKED)

VM Thread 20483 "C1 CompilerThread3": (state = BLOCKED)

VM Thread 19971 "C2 CompilerThread2": (state = IN_NATIVE)

VM Thread 19459 "C2 CompilerThread1": (state = IN_NATIVE)

VM Thread 18947 "C2 CompilerThread0": (state = IN_NATIVE)

Thread 15887 "Signal Dispatcher": (state = BLOCKED)

Thread 14339 "Finalizer": (state = BLOCKED)
    at Java.lang.Object.wait(Native Method)
    - waiting on <0x00000006c005fa88> (a Java.lang.ref.ReferenceQueue$Lock)
    at Java.lang.ref.ReferenceQueue.remove(ReferenceQueue.Java:143)
    - locked <0x00000006c005fa88> (a Java.lang.ref.ReferenceQueue$Lock)
    at Java.lang.ref.ReferenceQueue.remove(ReferenceQueue.Java:164)
    at Java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.Java:209)

Thread 13827 "Reference Handler": (state = BLOCKED)
    at Java.lang.Object.wait(Native Method)
    - waiting on <0x00000006c0029358> (a Java.lang.ref.Reference$Lock)
    at Java.lang.Object.wait(Object.Java:502)
    at Java.lang.ref.Reference.tryHandlePending(Reference.Java:191)
    - locked <0x00000006c0029358> (a Java.lang.ref.Reference$Lock)
    at Java.lang.ref.Reference$ReferenceHandler.run(Reference.Java:153)

Thread 2823 "main": (state = BLOCKED)
    at Java.lang.Thread.sleep(Native Method)
    at com.sosse.analytics.ActivityProducer.sleep(ActivityProducer.Java:110)
    at com.sosse.analytics.DemoMain$1.startApplication(DemoMain.Java:37)
    at com.sosse.common.application.DefaultApplication.start(DefaultApplication.Java:166)
    - locked <0x00000006c00e6080> (a Java.lang.Thread)
    at com.sosse.common.application.DefaultApplication.start(DefaultApplication.Java:118)
    at com.sosse.analytics.DemoMain.main(DemoMain.Java:48)

編集(4):ソースコードデシリアライザー

public static Object[] deserialize(final JsonElement jsonElement, final JsonDeserializationContext context, final BiFunction<Class<?>, JsonElement, Serializable[]> timeSeriesDeserializer) {
    final JsonObject jsonObject = jsonElement.getAsJsonObject();

    // get the important classes
    final Class<?> bucketContent = resolveClass("bucketContent", jsonObject, context);

    // configuration
    final TimeUnit timeUnit = context.deserialize(jsonObject.get("timeUnit"), TimeUnit.class);
    final int bucketSize = context.deserialize(jsonObject.get("bucketSize"), int.class);
    final boolean fillNumberWithZero = context.deserialize(jsonObject.get("fillNumberWithZero"), boolean.class);

    // the values
    final Long now = context.deserialize(jsonObject.get("now"), Long.class);
    final Serializable[] timeSeries = timeSeriesDeserializer.apply(bucketContent, jsonObject.get("timeSeries"));

    @SuppressWarnings("unchecked")
    final BucketTimeSeriesConfig config = new BucketTimeSeriesConfig(bucketContent, timeUnit, timeSeries.length, bucketSize, fillNumberWithZero);
    return new Object[]{config, timeSeries, now};
}
7
Philipp

クラッシュレポートは、JITコンパイラスレッドでエラーが発生したことを示しています。

_Current thread (0x00007f89e481c800):  JavaThread "C2 CompilerThread1"
_

次の手順を実行して、コンパイラの問題を診断します。

  1. JDK 9 EAで利用可能な最新のJVMビルドを試してください: https://jdk9.Java.net/download/

    問題が解消された場合は、このバージョンを使用するか、問題を解決する正確なコミットを見つけてJDK 8にバックポートすることができます。修正をバックポートする方法とHotSpotを自分でビルドする方法-これは別のトピックですが、私はできます興味があるかどうか教えてください。

  2. 問題が解決しない場合は、問題のあるメソッドを見つけて、コンパイルから除外してみてください。

    _Current CompileTask: C2: 114667 5303 4 com.sosse.time.timeseries.gson.TypeConverterHelper::deserialize (157 bytes)
    _

    あなたの場合、TypeConverterHelper.deserialize()のコンパイルに失敗したようです。この特定のメソッドを除外するには、次のJVMオプションを追加します。

    _-XX:CompileCommand=exclude,com.sosse.time.timeseries.gson.TypeConverterHelper::deserialize
    _
  3. それでも問題が解決しない場合は、複数の_-XX:CompileCommand_を指定して、さらに多くのメソッドを除外してみてください。除外する候補を見つけるには、_-XX:+PrintCompilation_を使用して、印刷されたリストの下部を確認します。クラスとパッケージ全体をコンパイルから除外することもできます。

    _-XX:CompileCommand=exclude,com.sosse.time.timeseries.gson.*::*
    _
  4. 特定のコンパイラの最適化を1つずつ無効にしてみてください。試すオプションは次のとおりです。

    _-XX:-DoEscapeAnalysis
    -XX:LoopUnrollLimit=0
    -XX:-PartialPeelLoop
    -XX:-UseLoopPredicate
    -XX:-LoopUnswitching
    -XX:-ReassociateInvariants
    -XX:MaxInlineLevel=1
    -XX:-IncrementalInline
    -XX:-RangeCheckElimination
    -XX:-EliminateAllocations
    -XX:-UseTypeProfile
    -XX:AliasLevel=0
    _
  5. 問題のあるメソッド/最適化が見つかったかどうかに関係なく、JVMを再度実行します。

    _-XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation
    _

    これにより、現在のディレクトリに詳細なコンパイルログを含む_hotspot_pid1234.log_ファイルが作成されます。

  6. bugreport.Java.com でバグレポートを送信します。選択する

    _Product/Category: HotSpot Virtual Machine (errors)
    Subcategory:      J2SE Server Compiler
    _

    手順5の完全な_hs_err_pid.log_と_hotspot_pid.log_を必ず含めてください。問題を示す自己完結型の例を減らして提供できれば非常に役立ちます。

    より迅速な対応のために、 hotspot-compiler-dev メーリングリストにメッセージを投稿することもできます。

16
apangin

JDKのバグのようです JDK-6675699 。バグレポートによると、そのバグの修正は8u74、8u81、8u82にバックポートされています。

(現時点では)エンドユーザーに焦点を当てていることに注意してください Javaダウンロードサイト 最新バージョンとして8u73を提供しています。 Java Developer Download Site から8u74を入手できます。


8u74にアップデートしても問題が解決しない場合は、バグレポートとしてOracleに送信する必要があります。考えられる診断は、JITコードコンパイラがコンパイル/最適化しようとしたときにクラッシュする原因となっているコードを実行していることです。それがPhaseIdealLoop::idom_no_updateは示しています。

JDK-6675699は、特定のJITコンパイラのバグ用です。診断されていない他のJITコンパイラのバグが存在する可能性があります。新しいバグレポートを送信すると、メンテナがそれらのバグを追跡するのに役立つ可能性があります。ただし、バグレポートは、バグを再現するのに十分な情報を提供できる場合にのみ役立ちます。

(もちろん、根本的な原因が完全に異なる可能性もあります。たとえば、コード内のサードパーティコードで、JVMデータ構造が破損しているためにコンパイラがクラッシュしている可能性があります。コンパイラを壊す...そしてコンパイラだけを壊す。)


[〜#〜] update [〜#〜]-これらによると リリースノート 、実際に必要なバージョンは= Java SE8u74-b32。

4
Stephen C

コアの分析には少し時間をかけるべきだと思います。

セグメンテーション違反

これにはいくつかの理由が考えられます。 JVM自体またはパッケージにバグがある可能性があります(これらの一部はCまたはC++で記述されています)。また、互換性のないコンポーネントが一緒に使用されている構成の誤りが原因である可能性もあります。

経験から、JVMのバグはこれらの中で最も可能性が低いです。 @Stephenは、それがここで起こりそうなケースだと考えていますが。

クラッシュの時点でスタックトレースをキャプチャすると、クラッシュが正確に発生している場所に関する手がかりが得られる可能性があります。

まず、コアファイルをディスクに保存できるように、ulimit -cunlimitedを構成する必要があることがわかりました。

コアファイルの分析
これを行ったら、次の方法を使用してコアを分析する必要があります。

ファイルを変換するには、コマンドラインツールjmapを使用します。

jmap -dump:format=b,file=dump.hprof /usr/bin/Java core_file

どこ:

dump.hprofは、作成するhprofファイルの名前です。

/ usr/bin/Javaは、コアダンプを生成したJavaバイナリのバージョンへのパスです。

1
The Roy