「クラッシュダンプからプロセスのcoreを切り出す」の編集履歴(バックアップ)一覧はこちら

クラッシュダンプからプロセスのcoreを切り出す」(2011/10/23 (日) 01:12:42) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*クラッシュダンプからプロセスのcoreを切り出す  以下のWebページを見ていたら、crashコマンドのエクステンションにgcoreというのがあり、クラッシュダンプから実行中のプロセスのcoreを切り出せることがわかった。   http://people.redhat.com/anderson/ ■gcoreエクステンションのインストール 1)ダウンロード  以下のWebページから、以下のファイルをダウンロードする。 :crash extension modules|   http://people.redhat.com/anderson/extensions.html gcore.c gcore.mk gcore.tar.bz2 defs.h 2)アーカイブを展開 $ tar xjf gcore.tar.bz2   <ーーlibgcoreというディレクトリができる $ ls defs.h gcore.mk libgcore     gcore.c gcore.tar.bz2 3)メイクする $ make -f gcore.mk  カレントディレクトリに「gcore.so」ができる。 $ ls defs.h gcore.mk gcore.tar.bz2 gcore.c gcore.so libgcore 4)gcore.soをcrashコマンドが認識できるディレクトリへコピー $ sudo mkdir -p /usr/lib/crash/extensions $ sudo cp gcore.so /usr/lib/crash/extensions/.    ここでcrashコマンドからgcore.soを読み込ませてみたが、以下のエラーがでた。 crash> extend gcore.so extend: /usr/lib/crash/extensions/gcore.so: undefined symbol: get_kvm_register_set crash> q  crashコマンドの最新版「crash-5.1.9.tar.gz」を上述のcrashのサイトからダウンロードしてインストールしたところ、無事使えるようになった。  インストールは解凍して make、make install するだけ。  ただし、既存のcrashコマンドは削除していないので、make installはせず、PATH環境変数にパスを追加して新しい方を使うようにした。 ■gcoreエクステンションの使用  クラッシュダンプを指定してcrashコマンドを起動する。  なお、クラッシュダンプの取得方法や、crashコマンドを使うための環境設定は[[クラッシュダンプ関連]]にまとめてある。  手順としては、extendサブコマンドでgcore.soをローディングさせた後、対象のpidを指定してgcoreサブコマンドを実行するだけ。 $ crash /boot/System.map-2.6.18-274.7.1.el5 \ /usr/lib/debug/lib/modules/2.6.18-274.7.1.el5/vmlinux \ /var/crash/2011-10-22-20\:08/vmcore crash> extend gcore.so <--- エクステンションをローディング /usr/lib/crash/extensions/gcore.so: shared object loaded crash> ps <-- psで実行中プロセスのpidを確認。 PID PPID CPU TASK ST %MEM VSZ RSS COMM     ・・・中略・・・ 6606 6408 1 c9bd9000 RU 0.0 1752 448 writer 6607 6173 1 f7ceaaa0 RU 0.0 1752 440 reader crash> gcore 6606 <--- gcoreに対象のpidを指定 gcore: WARNING: page fault at 8f82000     ・・・中略・・・ gcore: WARNING: page fault at bf8a3000 Saved core.6606.writer  WARNINGがいっぱいでるが、coreはできた。 $ ls -l core* -rw------- 1 XXXX XXXX 286720 10月 22 20:18 core.6606.writer  gdbで見てみると、たしかにcoreができている。 $ gdb ./writer core.6606.writer (gdb) bt #0 0x00d76402 in ?? () #1 0x0086ad00 in __nanosleep_nocancel () from /lib/libc.so.6 #2 0x08048d33 in main (argc=2, argv=0xbf8a4f04) at writer.c:137 (gdb) f 2 #2 0x08048d33 in main (argc=2, argv=0xbf8a4f04) at writer.c:137 137 nanosleep((struct timespec *)&ts, NULL); (gdb) info locals key = -771718095 shmid = 5079055 fd = 3 segptr = 0xb7fa9000 seglp = 0xb7fa9000 i = 1237 ret = 9625588 fp = 0x8f81008 opt = -1 flushFlg = 1 syncFlg = 0 syscallFlg = 0 delFlg = 0 ts = {tv_sec = 0, tv_nsec = 100000} ---- #comment() ----  
*クラッシュダンプからプロセスのcoreを切り出す  以下のWebページを見ていたら、crashコマンドのエクステンションにgcoreというのがあり、クラッシュダンプから実行中のプロセスのcoreを切り出せることがわかった。   http://people.redhat.com/anderson/ ■gcoreエクステンションのインストール 1)ダウンロード  以下のWebページから、以下のファイルをダウンロードする。 :crash extension modules|   http://people.redhat.com/anderson/extensions.html gcore.c gcore.mk gcore.tar.bz2 defs.h 2)アーカイブを展開 $ tar xjf gcore.tar.bz2   <ーーlibgcoreというディレクトリができる $ ls defs.h gcore.mk libgcore     gcore.c gcore.tar.bz2 3)メイクする $ make -f gcore.mk  カレントディレクトリに「gcore.so」ができる。 $ ls defs.h gcore.mk gcore.tar.bz2 gcore.c gcore.so libgcore 4)gcore.soをcrashコマンドが認識できるディレクトリへコピー $ sudo mkdir -p /usr/lib/crash/extensions $ sudo cp gcore.so /usr/lib/crash/extensions/.    ここでcrashコマンドからgcore.soを読み込ませてみたが、以下のエラーがでた。 crash> extend gcore.so extend: /usr/lib/crash/extensions/gcore.so: undefined symbol: get_kvm_register_set crash> q  crashコマンドの最新版「crash-5.1.9.tar.gz」を上述のcrashのサイトからダウンロードしてインストールしたところ、無事使えるようになった。  インストールは解凍して make、make install するだけ。  ただし、既存のcrashコマンドは削除していないので、make installはせず、PATH環境変数にパスを追加して新しい方を使うようにした。 ■gcoreエクステンションの使用  クラッシュダンプを指定してcrashコマンドを起動する。  なお、クラッシュダンプの取得方法や、crashコマンドを使うための環境設定は[[クラッシュダンプ関連]]にまとめてある。  手順としては、extendサブコマンドでgcore.soをローディングさせた後、対象のpidを指定してgcoreサブコマンドを実行するだけ。 $ crash /boot/System.map-2.6.18-274.7.1.el5 \ /usr/lib/debug/lib/modules/2.6.18-274.7.1.el5/vmlinux \ /var/crash/2011-10-22-20\:08/vmcore crash> extend gcore.so <--- エクステンションをローディング /usr/lib/crash/extensions/gcore.so: shared object loaded crash> ps <-- psで実行中プロセスのpidを確認。 PID PPID CPU TASK ST %MEM VSZ RSS COMM    ・・・中略・・・ 6606 6408 1 c9bd9000 RU 0.0 1752 448 writer 6607 6173 1 f7ceaaa0 RU 0.0 1752 440 reader crash> gcore 6606 <--- gcoreに対象のpidを指定 gcore: WARNING: page fault at 8f82000    ・・・中略・・・ gcore: WARNING: page fault at bf8a3000 Saved core.6606.writer  WARNINGがいっぱいでるが、coreはできた。 $ ls -l core* -rw------- 1 XXXX XXXX 286720 10月 22 20:18 core.6606.writer  gdbで見てみると、たしかにcoreができている。 $ gdb ./writer core.6606.writer (gdb) bt #0 0x00d76402 in ?? () #1 0x0086ad00 in __nanosleep_nocancel () from /lib/libc.so.6 #2 0x08048d33 in main (argc=2, argv=0xbf8a4f04) at writer.c:137 (gdb) f 2 #2 0x08048d33 in main (argc=2, argv=0xbf8a4f04) at writer.c:137 137 nanosleep((struct timespec *)&ts, NULL); (gdb) info locals key = -771718095 shmid = 5079055 fd = 3 segptr = 0xb7fa9000 seglp = 0xb7fa9000 i = 1237 ret = 9625588 fp = 0x8f81008 opt = -1 flushFlg = 1 syncFlg = 0 syscallFlg = 0 delFlg = 0 ts = {tv_sec = 0, tv_nsec = 100000} ---- #comment() ----  

表示オプション

横に並べて表示:
変化行の前後のみ表示: