[解決済み] sun.misc.Unsafe.park で WAITING (ネイティブメソッド)
質問
私のアプリケーションの1つが、ある期間負荷をかけて実行するとハングアップします。誰か、jstackでそのような出力を引き起こす原因を知っていますか?
"scheduler-5" prio=10 tid=0x00007f49481d0000 nid=0x2061 waiting on condition [0x00007f494e8d0000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006ee117310> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
ハングアップしたときのjstackの出力でよく見かけるのですが。
Springの@Async & maps、synchronized maps & ehcacheを多用しています。
興味深いのは、この現象がアプリのインスタンスの1つでしか起きていないことです。他の2つのインスタンスは全く問題なく動作しています。 このような場合、他に何を調査すればより詳細な情報を得ることができますか?
こんな投稿がありました。 https://stackoverflow.com/questions/23992787/parking-to-wait-for-0xd8cf0070-a-java-util-concurrent-locks-abstractqueueds が、私の場合、あまり役に立ちません。
解決方法は?
unsafe.parkは、アーキテクチャ固有のコードを使用していることを除けば、thread.waitとほとんど同じです(したがって、「unsafe」である理由)。 unsafeは一般に公開されていませんが、アーキテクチャ固有のコードが大きな最適化の利点をもたらすであろうJava内部ライブラリで使用されています。スレッドプーリングによく使われます。
つまり、あなたの質問に答えると、スレッドがやっていることは何かを待っているだけで、実際にはCPUを使っていないのです。元のスタック・トレースでロックを使用していることを考えると、このケースではデッドロックが発生していると考えられます。
そうですね、あなたはもうほとんどこの問題を解決していることでしょう。しかし、誰かが sun.misc.unsafe.park でググると、あなたはトップ結果の1つになっています。この質問に答えることで、CPUをすべて使っているように見えるこのメソッドが何であるかを理解しようとしている他の人の助けになるかもしれないと思いました。
関連
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] Maven: assembly-pluginが全く実行されない
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] java.io.IOException。DER長の短い読み取り
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] x--やx++はここで何をするのですか?