crashコマンドによるクラシュダンプの解析

 クラッシュダンプをデバッグするには、crashコマンドを使う。
Usage:
  crash [-h [opt]][-v][-s][-i file][-d num] [-S] [mapfile] [namelist] [dumpfile]
mapfile
シンボルのアドレスが記された以下にあるファイル。ダンプ取得時のカーネルがシンボル情報をもっていれば、nmコマンドで作れるらしい。    
/boot/System.map-<カーネルバージョン>
namelist
デバッグ情報付き(-gオプションでコンパイル)のカーネルのバイナリ(vmlinux)。kernel-debuginfoをインストールすると、以下に作成される。
/usr/lib/debug/lib/modules/<カーネルバージョン>/vmlinux
dumpfile
クラッシュダンプ(vmcore)で、カーネルのパニック時などにデフォルトの設定なら以下に作成される。
/var/crash/YYYY-MM-DD-hh:mm/vmcore

というわけで、crashコマンドを使う前に、「kernel-debuginfo」パッケージをインストールする。CentOSだとRHEL用のrpmが以下にあるので、他に必要な「kernel-debuginfo-common」そこからダウンロードしてインストールした。
 kernel-debuginfoをインストールするには、他にkernel-debuginfo-commonも必要なので、それもインストールする。
 http://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/i386/Debuginfo/
# rpm -ivh kernel-debuginfo-common-2.6.18-274.7.1.el5.i686.rpm
# rpm -ivh kernel-debuginfo-2.6.18-274.7.1.el5.i686.rpm

なお、RHELだと以下でインストールできるらしが、CentOSなので地道にダウンロードした。
でも、ダウンロード元がRedHatのサイトなので、以下でもOKかも。
# yum −enablerepo=¥*debuginfo install kernel-debuginfo.$(uname -m) crash 

インストールが済むと、デバッグ情報を含んだカーネルが以下にできているので、それをcrashのnamelistに指定する。
$ ls -l /usr/lib/debug/lib/modules/2.6.18-274.7.1.el5/vmlinux
-rwxr-xr-x 1 root root 70916548 10月 18 01:29 vmlinux

クラッシュダンプの起動は以下のようにする。
# 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>」のプロンプトが出て、解析用のサブコマンドが入力できる。
    ・・・中略・・・
  SYSTEM MAP: /boot/System.map-2.6.18-274.7.1.el5                      
DEBUG KERNEL: /usr/lib/debug/lib/modules/2.6.18-274.7.1.el5/vmlinux (2.6.18-274.7.1.el5)
    DUMPFILE: vmcore
        CPUS: 4
        DATE: Sat Oct 22 10:16:57 2011
      UPTIME: 00:06:41
LOAD AVERAGE: 0.21, 0.12, 0.05
       TASKS: 194
    NODENAME: localhost.localdomain
     RELEASE: 2.6.18-274.7.1.el5
     VERSION: #1 SMP Thu Oct 20 16:20:37 EDT 2011
     MACHINE: i686  (2594 Mhz)
      MEMORY: 1 GB
       PANIC: "SysRq : Trigger a crashdump"
         PID: 5948
     COMMAND: "bash"
        TASK: f7c5b000  [THREAD_INFO: dacdc000]
         CPU: 2
       STATE: TASK_RUNNING (SYSRQ)

crash>  help   
*          files          mod          runq        union          
alias      foreach        mount        search      vm             
ascii      fuser          net          set         vtop           
bt         gdb            p            sig         waitq          
btop       help           ps           struct      whatis         
dev        irq            pte          swap        wr             
dis        kmem           ptob         sym         q              
eval       list           ptov         sys            
exit       log            rd           task           
extend     mach           repeat       timer    

crash> ps
   PID    PPID  CPU   TASK    ST  %MEM     VSZ    RSS  COMM
>     0      0   0  c06903c0  RU   0.0       0      0  [swapper]
      0      1   1  f7c32550  RU   0.0       0      0  [swapper]
   ・・・省略・・・


名前:
コメント:


最終更新:2011年10月23日 00:39