Personal tools
You are here: Home ブログ 井上 ありえるえりあ勉強会でJVMを落とした話の続き
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

ありえるえりあ勉強会でJVMを落とした話の続き

菅原さんが次のコードでJVMを落としたのが、ありえるえりあ勉強会の最大の見せ場でした。

public class CrashWithHeap { 
    public static void main(String[] args) {
        Object[] o = null; 
        for (;;) {
            o = new Object[] {o}; 
        }
    } 
}

家のDebianでやってみました。落ちました。

コアファイルを吐いたのでgdbでスタックを見てみました。スタックの最後が以下のように延々と続いています。フルGCのマーク&スイープのマークフェーズで循環的な関数の再帰呼び出しが起きてスタックオーバーフローしたようです。

#0  0x062ff9d7 in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#1  0x062e7360 in MarkSweep::mark_and_follow () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#2  0x062ff9dd in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#3  0x062e7360 in MarkSweep::mark_and_follow () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#4  0x062ff9dd in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#5  0x062e7360 in MarkSweep::mark_and_follow () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#6  0x062ff9dd in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#7  0x062e7360 in MarkSweep::mark_and_follow () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#8  0x062ff9dd in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#9  0x062e7360 in MarkSweep::mark_and_follow () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
#10 0x062ff9dd in objArrayKlass::oop_follow_contents () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
以下、省略

完全にJVMのバグです。

http://bugs.sun.com で上記ふたつの関数名で検索して見つからないので、アリエルから報告した方が良さそうです。

ちなみにコールスタックの開始の方は以下のように始まります。

#12968 0x0638811b in Threads::oops_do () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so
[snip]
#12971 0x061d4871 in GenMarkSweep::mark_sweep_phase1 () from /usr/local/jdk1.6.0_03/jre/lib/i386/client/libjvm.so

OOP(ordinary object pointer)は初見でしたが、JVM内のポインタ表現の呼称のようです。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/jvm-bug/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.