2011-06-21 5 views
0

MySQLサーバと対話するいくつかの実験的なJavaコードを実行している間、私はこれらのメッセージを受信して​​、サーバがクラッシュ:のsyslogdカーネル:コード:

Message from [email protected] at Jun 20 20:04:12 ... 
kernel:Stack: 

Message from [email protected] at Jun 20 20:04:12 ... 
kernel:Call Trace: 

Message from [email protected] at Jun 20 20:04:12 ... 
kernel:Code: e0 48 8d 55 b0 48 89 4d e8 4c 89 45 f0 48 89 45 b8 48 8d 45 d0 4c 89 4d f8 c7 45 b0 10 00 00 00 48 89 45 c0 e8 5a ff ff ff c9 c3 <89> f0 b9 40 00 00 00 55 99 45 31 c0 f7 f9 48 89 e5 48 89 fa 41 

、彼らが何を意味するのですか?再起動後、すべてが再び動作しています。/var/log/messagesにはイベントの時刻の近くにエントリがなく、dmesgはそれについて何も表示していないようです。それは場合に役立ちます

のFedora(ゴダード)13を解放 2.6.34.8-68.fc13.x86_64

+0

再現可能ですか?もしそうでなければ、あなたは究極の困難な時間を見つけ出すつもりです。 – paxdiablo

+0

私はまだエラーを再現しようとしていませんが、明日はサーバーへの物理的なアクセスが良好になると思います。それが再び起こらなければ、それは問題ではない。私は、主に、私がテストしているアプリケーションがそれを引き起こしたと懸念しています。 – Jay

答えて

2

はここで、ダンプコードの解体です。私は角括弧で囲まれたバイトがコードがクラッシュした場所であると仮定していますが、あるレジスタから別のレジスタへのmovステートメントがどのようにして動作するのかわかりません。

0: e0 48     loopne 0x4a 
    2: 8d 55 b0    lea -0x50(%ebp),%edx 
    5: 48      dec %eax 
    6: 89 4d e8    mov %ecx,-0x18(%ebp) 
    9: 4c      dec %esp 
    a: 89 45 f0    mov %eax,-0x10(%ebp) 
    d: 48      dec %eax 
    e: 89 45 b8    mov %eax,-0x48(%ebp) 
    11: 48      dec %eax 
    12: 8d 45 d0    lea -0x30(%ebp),%eax 
    15: 4c      dec %esp 
    16: 89 4d f8    mov %ecx,-0x8(%ebp) 
    19: c7 45 b0 10 00 00 00 movl $0x10,-0x50(%ebp) 
    20: 48      dec %eax 
    21: 89 45 c0    mov %eax,-0x40(%ebp) 
    24: e8 5a ff ff ff   call 0xffffff83 
    29: c9      leave 
    2a: c3      ret  
    2b: 89 f0     mov %esi,%eax <-- here is where it failed? 
    2d: b9 40 00 00 00   mov $0x40,%ecx 
    32: 55      push %ebp 
    33: 99      cltd 
    34: 45      inc %ebp 
    35: 31 c0     xor %eax,%eax 
    37: f7 f9     idiv %ecx 
    39: 48      dec %eax 
    3a: 89 e5     mov %esp,%ebp 
    3c: 48      dec %eax 
    3d: 89 fa     mov %edi,%edx 
    3f: 41      inc %ecx 


私はあなたが関与カーネルコードを配置するためにPerlやPythonの数行を書くために必要がある場合がありますので、バイナリデータを検索するための*はgrepプログラムのいずれかを使用する方法がわかりません。あなたのJavaコード、またはMySQLと関係するものが、カーネルレベルのクラッシュを引き起こした可能性があることは疑いありません。 64ビットモードのための解体を修正し


:スタックアンダーフロー:

00000000 <.data>: 
    0: e0 48     loopne 0x4a 
    2: 8d 55 b0    lea -0x50(%rbp),%edx 
    5: 48 89 4d e8    mov %rcx,-0x18(%rbp) 
    9: 4c 89 45 f0    mov %r8,-0x10(%rbp) 
    d: 48 89 45 b8    mov %rax,-0x48(%rbp) 
    11: 48 8d 45 d0    lea -0x30(%rbp),%rax 
    15: 4c 89 4d f8    mov %r9,-0x8(%rbp) 
    19: c7 45 b0 10 00 00 00 movl $0x10,-0x50(%rbp) 
    20: 48 89 45 c0    mov %rax,-0x40(%rbp) 
    24: e8 5a ff ff ff   callq 0xffffff83 
    29: c9      leaveq 
    2a: c3      retq 
    2b: 89 f0     mov %esi,%eax 
    2d: b9 40 00 00 00   mov $0x40,%ecx 
    32: 55      push %rbp 
    33: 99      cltd 
    34: 45 31 c0    xor %r8d,%r8d 
    37: f7 f9     idiv %ecx 
    39: 48 89 e5    mov %rsp,%rbp 
    3c: 48 89 fa    mov %rdi,%rdx 
    3f: 41      rex.B 

[すべてのこれらの年後に再びこれを見ては、私はより多くの可能性の高い問題が何であったかを実現。 retqにはスタックが空であるため、戻り先がありませんでしたので、命令ポインタは次の命令をポイントしたままになりました - jc]

+0

これらの命令が実行されていた場所をどのように見つけることができますか?それがJavaかMySQL(または何か他のもの)であるかどうかを知ることは役に立ちます。あなたがソースやクラスの特定の部分にトレースするのを助けることができれば、それも助けになります。 – Jay

+0

それは明らかにカーネルのコードなので、JavaとMySQLは尤度のリストであまり高くありません。私が推測してみると、私は宇宙放射線を排除しないだろう。 –

+0

コードを32ビットx86としてデコードしたようですが、おそらくx86_64です。問題はこれを示唆し、複数の 'dec%reg'命令はおそらくREX接頭辞です。 x86-64として解読できれば、その結果は異なるかもしれませんし、何が起こったかのヒントを与えるかもしれません。 – Eugene

関連する問題