(1)Dumpの確認
dumpはデフォルトで/var/crash/`hostname`配下に格納される。変更するには
dumpadmコマンドで変更が可能。ダンプが取得されるとunix.Xとvmcore.X
(Xは数字で0から始まる)の2つセットで保存される。
# dumpadm
Dump content: kernel pages
Dump device: /dev/dsk/c0t0d0s1 (swap)
Savecore directory: /var/crash/blade150
Savecore enabled: yes
* /var/crash/blade150にダンプが格納される。
# cd /var/crash/blade150
# ls -la
# ls -la
合計 113734
drwx------ 2 root root 512 9月 12日 21:46 .
drwxr-xr-x 3 root root 512 7月 16日 2003年 ..
-rw-r--r-- 1 root root 2 8月 4日 2003年 bounds
-rw-r--r-- 1 root root 736265 8月 4日 2003年 unix.0
-rw-r--r-- 1 root root 52543488 8月 4日 2003年 vmcore.0
* 上記の例では、2003.8.4にダンプが取得されたことが分かる。
(2)mdbコマンドで基本情報を見る。
@mdbコマンドを実行すると以下のようになる。
# mdb -k unix.0 vmcore.0
Loading modules: [ unix krtld genunix ip usba s1394 nfs ipc ptm logindmux cpc ]
>
Aダンプが採取されたときのメッセージを見る
>$<msgbuf
(省略)
panic[cpu0]/thread=2a100045d20:
0x3000007e900: sync initiated
0x30000a2a380:
0x300015c4220: sched:
0x30000a268e0: software trap 0x7f
0x300015c4640: pid=0, pc=0xf0045678, sp=0x2a100044ca1, tstate=0x8800001405, context=0x195c
0x3000007f560: g1-g7: 1003a09c, 10418000, 10418000, 7c428, 30000425e08, 0, 2a100045d20
0x300015c4bc0:
0x3000206dee3: 00000000fff63cc0 unix:sync_handler+150 (1041aec0, 10000000, fff789b8, 1, 104a5e28, 1)
0x30000585963: %l0-3: 00000000102bc1cc ffffffffffffe000 0000030000464ec8 0000000000002000
%l4-7: 00000300002b4540 0000000000000000 0000000000000000 00000310000a8d80
0x3000007e0c3: 00000000fff63da0 unix:vx_handler+8c (f0000000, 104183b8, 104182b0, fff4acd0, f0055aa1, 3)
0x3000206dd83: %l0-3: 0000000010028678 0000030000177808 00000000df194000 0000000000340000
%l4-7: 00000300000575c8 0000000000000008 0000000000000000 0000000000000000
0x300015c52a3: 00000000fff63e50 unix:callback_handler+20 (fff4acd0, fff6a280, 0, 0, 0, 0)
0x300015c4fe3: %l0-3: 0000000000000016 00000000fff63701 000003000016fdd0 000002a100816d50
%l4-7: 000003000209f188 0000000000000000 0000000000000000 000002a1008173f0
0x30000a26360:
0x3000007f143: syncing file systems...
0x3000206d6a0:
panic[cpu0]/thread=2a100045d20:
0x3000007ed20: panic sync timeout
0x300015c4e80:
0x3000206dc23: dumping to /dev/dsk/c0t0d0s1, offset 107806720
* このことより、CPU0でsoftware trap 7fでパニックしていることが分かる。
Bスタックトレースを確認する
> $c
0xf0045678(30000b824c8, 1046b030, 20, 30000bd6180, 30000425b88, 0)
mutex_vector_exit+0x20(e0000000, 1, 1c960c0, 3000016fdd0, 2a1000454b8, c0000000)
Cpanicしたときのプロセスを確認する
> ::ps
S PID PPID PGID SID UID FLAGS ADDR NAME
R 0 0 0 0 0 0x00000219 0000000010423e90 sched
R 3 0 0 0 0 0x00020219 0000030000bfa008 fsflush
R 2 0 0 0 0 0x00020219 0000030000bfaa98 pageout
R 1 0 0 0 0 0x00004208 0000030000bfb528 init
R 767 1 716 716 0 0x00000208 0000030001fab570 dsdm
R 744 1 744 744 0 0x00004208 0000030002080a90 htt
R 750 744 750 750 0 0x04004208 0000030001456aa8 htt_xbe
R 730 1 730 730 0 0x00000208 0000030002081520 speckeysd
R 518 1 518 518 0 0x00004208 0000030001b8c020 ttymon
R 517 1 517 517 0 0x00014208 0000030000c6d530 sac
R 527 517 517 517 0 0x00014208 0000030000c95558 ttymon
R 511 1 511 511 0 0x04020208 0000030001b8cab0 snmpXdmid
R 510 1 510 510 0 0x04000208 0000030001a11538 dmispd
R 504 1 504 504 0 0x00020208 000003000199aaa0 snmpdx
R 541 504 541 541 0 0x04004208 0000030000cdaad0 mibiisa
R 501 1 501 501 0 0x00000208 0000030001a10018 httpd
R 526 501 501 501 60001 0x10000208 0000030000cba030 httpd
R 525 501 501 501 60001 0x10000208 0000030000cbaac0 httpd
R 524 501 501 501 60001 0x10000208 0000030000cbb550 httpd
R 523 501 501 501 60001 0x10000208 0000030001c10028 httpd
R 522 501 501 501 60001 0x10000208 0000030001c10ab8 httpd
R 520 501 520 501 60001 0x10000208 0000030000c6caa0 httpd
R 521 520 520 501 60001 0x04004208 0000030001a10aa8 java
R 487 1 487 487 0 0x04010208 0000030001b8d540 dtlogin
R 540 487 487 487 0 0x00004208 0000030000cdb560 fbconsole
R 539 487 539 539 0 0x14000208 0000030000c94ac8 dtlogin
R 716 539 716 716 0 0x00004208 0000030000cda040 Xsession
R 765 716 765 765 0 0x00014208 0000030000d80048 sdt_shell
R 768 765 765 765 0 0x00004208 0000030001faaae0 sh
R 778 768 765 765 0 0x00004208 0000030001faa050 dtdbcache
R 754 716 716 716 0 0x00004208 0000030000c6c010 dthello
R 726 716 716 716 0 0x00004208 0000030000d81568 fbconsole
R 534 487 534 534 0 0x10004208 0000030000c94038 Xsun
R 467 1 0 0 0 0x00004208 000003000199b530 atokmngdaemon
R 462 1 462 462 0 0x00004208 0000030001900000 htt
R 464 462 462 462 0 0x04004208 0000030001932008 htt_server
R 458 1 0 0 0 0x00000208 0000030001933528 jserver
R 459 458 0 0 0 0x00004208 0000030001932a98 jserver_m
R 452 1 0 0 0 0x00000208 00000300018b6ae0 dpkeyserv
R 446 1 446 0 0 0x00010208 0000030001901520 smcboot
R 447 446 446 0 0 0x00010208 0000030001900a90 smcboot
R 444 1 444 444 0 0x04014208 00000300018b6050 vold
R 435 1 435 435 0 0x00000208 000003000171d558 cssd
R 438 435 438 438 0 0x00004208 00000300018ce048 kkcv
R 437 435 437 437 0 0x00004208 00000300018b7570 ccv
R 436 435 436 436 0 0x00004208 00000300014ed548 cs00
R 427 1 0 0 0 0x00004208 00000300017ea040 rdaemon
R 439 427 0 0 0 0x00000208 00000300018cead8 rdaemon
R 412 1 411 411 0 0x00000208 00000300018cf568 arraymon
R 382 1 382 382 0 0x00000208 0000030001457538 utmpd
R 375 1 375 375 0 0x04000208 00000300017eaad0 powerd
R 362 1 362 362 0 0x00020208 00000300017eb560 lpsched
R 225 1 225 225 0 0x04000208 000003000171cac8 nscd
R 216 1 216 216 0 0x00000208 000003000171c038 cron
R 211 1 211 211 0 0x04000208 000003000149aab0 syslogd
R 200 1 200 200 0 0x04000208 000003000149b540 automountd
R 194 1 194 194 0 0x00000208 00000300014d5550 lockd
R 193 1 193 193 1 0x14000208 00000300014ecab8 statd
R 182 1 182 182 0 0x00000208 000003000149a020 inetd
R 488 182 488 488 0 0x00004208 000003000199a010 in.telnetd
R 495 488 495 495 0 0x00004208 0000030001c11548 sh
R 570 495 570 495 0 0x00014208 0000030000d80ad8 bash
R 157 1 157 157 0 0x00000208 00000300014d4030 rpcbind
R 108 1 108 108 0 0x04000208 00000300014d4ac0 picld
R 64 1 64 64 0 0x04000208 00000300014ec028 devfsadm
R 52 1 52 52 0 0x04010208 0000030001456018 syseventd
C特定のプロセスの情報を見てみる(in.telnetdを見てみる)
in.telnetdのアドレスは000003000199a010というのがBから分かる。
> 000003000199a010$<proc
0x3000199a010:
0x3000199a010: exec as lockp
30001b81e48 30000bead08 3000046e9c0
0x3000199a028: crlock
0x3000199a028: owner/waiters
0
0x3000199a030: cred swapcnt stat
30000439f28 0 2
0x3000199a03d: wcode pidflag wdata
0 0 0
0x3000199a044: ppid link parent
182 0 3000149a020
0x3000199a058: child sibling psibling
30001c11548 0 0
0x3000199a070: sibling_ns child_ns next
0 0 30001b8d540
0x3000199a088: prev nextofkin orphan
30001c11548 3000149a020 30001c11548
0x3000199a0a0: nextorph pglink ppglink
0 0 0
0x3000199a0b8: sessp pidp pgidp
30001b63b88 300001456a8 300001456a8
0x3000199a0d0: cv flag_cv lwpexit
0 0 0
0x3000199a0d6: holdlwps flag utime
0 4208 0
0x3000199a0e8: stime cutime cstime
2 0 0
0x3000199a100: segacct brkbase brksize
0 27b50 6000
0x3000199a118: sig ignore siginfo
0 e39c00060000000fffbdfeff00001fff
0x3000199a130: sigqueue sigqhdr signhdr
0 0 0
0x3000199a148: stopsig lwpid lwpcnt
0 1 1
0x3000199a154: lwprcnt lwpwait zombcnt
1 0 0
0x3000199a160: zomb_max zomb_tid tlist
0 0 30001987cc0
0x3000199a178: sigmask fltmask trace
0 0 0
0x3000199a190: plist agenttp warea
0 0 0
0x3000199a1a8: nwarea wpage nwpage
0 0 0
0x3000199a1bc: mapcnt rlink srwchan_cv
0 0 0
0x3000199a1d0: stksize mstart mterm
4000 2a8097a62c 0
0x3000199a1e8: mlreal rprof_cyclic defunct
0 0 0
0x3000199a2d0: pflock
0x3000199a2d0: owner/waiters
0
0x3000199a9c8: server_threads door_list unref_list
0 0 0
0x3000199a9e0: server_cv unref_thread tnf_flags
0 0 0
0x3000199a9e8: audit_data aslwptp swrss
0 0 0
0x3000199aa00: aio itimer notifsigs
0 0 0
0x3000199aa18: notifcv alarmid sc_unblocked
0 0 0
0x3000199aa30: sc_door usrstack stkprot
0 ffbf0000 f
0x3000199aa44: model lcp
100000 0
0x3000199aa50: lcp_mutexinitlock
0x3000199aa50: owner/waiters
0
0x3000199aa58: utraps corefile rce
0 30000646560 0
0x3000199aa70: task taskprev tasknext
30000bf9f88 30001a10018 30001b8d540
0x3000199aa88: lwpdaemon lwpdwait tidhash
0 0 0
0x3000199aa98: schedctl
0
さて、この中身の意味についてですが、意味は/usr/include/sys/proc.h の proc 構造体を
確認します。例えばcredはprocess credentialsと記載されています。credential構造体への
ポインタを意味します。ppidはprocess id of parentと記載されており、親プロセスIDとい
うことが分かります。
D スレッドリスト
プロセスID(pid)、プロセス情報(proc)、credential 情報 (cred)の関連性をつきとめるには
以下のように、スレッド一覧からcshスレッドとproc構造のアドレスを見つけることが出来ます。
以下はin.telnetdの情報
============== thread_id 30001987cc0
0x3000199a4d0:
process args in.telnetd
0x30001987de8: lwp procp wchan
30001985be0 3000199a010 30001b63852
0x30001987cf8:
pc sp
cv_wait_sig_swap+0x1942a1006fd0a1
cv_waituntil_sig+0x14(30001b63852, 0, 0, 0, 30001b63818, 0)
poll+0x430(300018653c0, 8, 30001b55d70, 0, ffffffff, ffbef5f0)
syscall_trap32+0xa8(ffbef5f0, 1, ffffffffffffffff, 0, 100, 0)
以下はpanicのときのスレッドの情報
============== thread_id 2a100045d20
p0+0x4c0:
process args sched
0x2a100045e48: lwp procp wchan
300018dce08 10423e90 0
0x2a100045d58:
pc sp
panicsys+0x44 2a1000772d1
vpanic+0xcc(1013f0d8, 2a100077e78, 4, 2, 3000017bf28, 3000015d220)
panic+0x1c(1013f0d8, 2, 30000425ef8, bf0d5fa3080, 140e7900, 0)
cyclic_fire+0x68(1041b628, 300001569d0, 3000017bf28, 3b9aca00, 30000425ea8, 3000015d220)
cbe_level14+0x38(0, 802, e, 1041b628, 10040, 1000aa20)
current_thread+0x44(a, 80000010f64a6595, 80000010, f64a6587, f64a6584, 0)
biowait+0x40(300015dade0, 300015dade0, 1041b804, 1041b628, 0, 30001e6ad88)
bwrite_common+0x184(300015dade0, 300015dade0, 1, 1, 846, 3000016b520)
sbupdate+0x12c(10444f00, f, c, 400000, 3000016b520, 300001a9000)
ufs_trans_sbupdate+0x6c(3000016b520, 10444f00, f, 3000002c000, 0, 400)
ufs_update+0x1b4(0, 300014e0018, 20, 90, 30000cacac8, 30000cacae0)
ufs_sync+0x34(0, 0, 0, fffffeee, 0, 0)
vfs_sync+0x94(2, 0, 1046cd00, 10436990, 2000, 0)
vfs_syncall+0x4c(a, a, a, 10444fa8, f00228c0, 7ff)
panicsys+0x42c(10423ac0, fff63d48, 10052ef8, 78002000, 3000015fb08, f)
vpanic+0xcc(10052ef8, fff63d48, fff63ce8, 3000015fb08, 104b36a8, 30000c0f540)
*in.telnetdのPPID:182、スレッド30001987cc0、procアドレス3000199a010から
プロセスIDとcred構造体に対するポインターを識別することが出来ます
> 3000199a010$<proc
3000199a010$<proc
0x3000199a010:
0x3000199a010: exec as lockp
30001b81e48 30000bead08 3000046e9c0
0x3000199a028: crlock
0x3000199a028: owner/waiters
0
0x3000199a030: cred swapcnt stat
30000439f28 0 2
0x3000199a03d: wcode pidflag wdata
0 0 0
0x3000199a044: ppid link parent
182 0 3000149a020
0x3000199a058: child sibling psibling
30001c11548 0 0
0x3000199a070: sibling_ns child_ns next
0 0 30001b8d540
0x3000199a088: prev nextofkin orphan
30001c11548 3000149a020 30001c11548
0x3000199a0a0: nextorph pglink ppglink
0 0 0
0x3000199a0b8: sessp pidp pgidp
30001b63b88 300001456a8 300001456a8
:(省略)
*PIDP:300001456a8からPIDを確認する(下記の場合488)
> 300001456a8$<pid
0x300001456a8:
bits
40000027
0x300001456ac: id pglink link
488 3000199a010 0
E メモリ破壊箇所を見つけるために、'kmem_verify' コマンドがあります。
今回のダンプで実行してみると・・・
> ::kmem_verify
Cache Name Addr Cache Integrity $<2>
と何も表示されない場合、メモリ破壊がないことを意味します。ある場合の例は
以下の通り
> ::kmem_verify
Cache Name Addr Cache Integrity
.....<snip>.....
streams_dblk_232 300009e6000 4 corrupt buffers
.....<snip>.....
> 300009e6000::kmem_verify
Summary for cache 'streams_dblk_232'
buffer 30000bb4660 (allocated) has a corrupt redzone signature
buffer 30000bb4ae0 (allocated) has a corrupt redzone signature
buffer 30000bb4f60 (allocated) has a corrupt redzone signature
buffer 30000bb5ce0 (allocated) has a corrupt redzone signature
F マウントされてるファイルシステムの一覧表示
::fsinfo
マウントされているファイルシステムのテーブルを表示します。これには、vfs_t アドレス、ops ベクトル、
および各ファイルシステムのマウントポイントが含まれます。
> ::fsinfo
VFSP TYP DATA OPS MOUNT
10444f00 2 3000016b520 ufs_vfsops /
30000425a48 5 30000085348 prvfsops /proc
30000425868 12 0 fdvfsops /dev/fd
30000425728 4 30000f15078 nmvfsops /etc/sysevent/syseve...
300004257c8 4 30000e03e10 nmvfsops /etc/sysevent/devfsa...
300004255e8 4 30000f14f38 nmvfsops /dev/.devfsadm_synch...
30000425548 15 300004353f8 mntvfsops /etc/mnttab
30000425688 11 30000c0aa78 tmp_vfsops /var/run
30000425408 4 30000e03550 nmvfsops ??
30000425368 11 30000c0a028 tmp_vfsops /tmp
300004252c8 4 300016a1bc0 nmvfsops ??
30000425228 18 30000434e78 auto_vfsops /net
300004250e8 18 30000434d18 auto_vfsops /home
30000425048 18 30000434c68 auto_vfsops /xfn
30000424fa8 4 30001724ce0 nmvfsops ??
30000425188 4 300017247e0 nmvfsops /etc/.name_service_doo
30000424f08 4 30001724060 nmvfsops /var/spool/lp/fifos/...
30000424d28 7 300019db400 nfs_vfsops /vol
30000424e68 2 300014e0018 ufs_vfsops /cdrom/multi_icd_sol...
30000424c88 2 30001bffc20 ufs_vfsops /cdrom/multi_icd_sol...
30000424dc8 2 30001bffa60 ufs_vfsops /cdrom/multi_icd_sol...
30000424b48 2 30001bff8a0 ufs_vfsops /cdrom/multi_icd_sol...
30000424aa8 2 30001bff6e0 ufs_vfsops /cdrom/multi_icd_sol...
30000424a08 9 3000015b408 hsfs_vfsops /cdrom/multi_icd_sol...
30000424968 4 3000183dd28 nmvfsops ??
30000424be8 4 30001c77c00 nmvfsops ??
G modinfoコマンドと一緒
> ::modinfo
ID LOADADDR SIZE REV MODULE NAME
0 10000000 7de00 0 unix (?)
1 10055178 17527 0 krtld (?)
2 10068810 117710 0 genunix (?)
3 10144678 26f 0 platmod (?)
4 101448c0 b825 0 SUNW,UltraSPARC-IIe (?)
5 0 0 0 cl_bootstrap (?)
6 10150000 43f3 1 specfs (filesystem for specfs)
7 0 0 0 swapgeneric (?)
8 10155cd8 333c 1 TS (time sharing sched class)
9 101588d0 8d4 1 TS_DPTBL (Time sharing dispatch table)
10 10158958 290cb 1 ufs (filesystem for ufs)
11 1017f9b3 1f7 1 fssnap_if (File System Snapshot Interface)
12 1017fb03 12248 1 rpcmod (RPC syscall)
13 1018f3f3 66c78 1 ip (IP Streams module)
H pmapコマンドと同一の情報
> 000003000199a010::pmap
SEG BASE SIZE RES PATH
00000300019e9d28 0000000000010000 24k /usr/sbin/in.telnetd
00000300019e82e8 0000000000026000 8k 8k /usr/sbin/in.telnetd
00000300019e9b68 0000000000028000 24k 24k [ anon ]
00000300019a2f58 00000000ff100000 688k /usr/lib/libc.so.1
00000300019a2d98 00000000ff1bc000 32k 32k /usr/lib/libc.so.1
00000300019e80b8 00000000ff1f0000 16k /usr/platform/sun4u/lib/l...
00000300019e82b0 00000000ff200000 8k 8k [ anon ]
00000300019a2858 00000000ff210000 16k /usr/lib/libmp.so.2
00000300019e8278 00000000ff224000 8k 8k /usr/lib/libmp.so.2
0000030001a1b960 00000000ff230000 16k /usr/lib/libcmd.so.1
00000300019e8320 00000000ff244000 8k 8k /usr/lib/libcmd.so.1
00000300019e99e0 00000000ff250000 72k /usr/lib/libbsm.so.1
00000300019e99a8 00000000ff272000 16k 16k /usr/lib/libbsm.so.1
00000300019e9a88 00000000ff280000 568k /usr/lib/libnsl.so.1
00000300019e9ac0 00000000ff31e000 40k 40k /usr/lib/libnsl.so.1
00000300019e9a50 00000000ff328000 24k 16k [ anon ]
00000300019e9dd0 00000000ff340000 24k /usr/lib/libpam.so.1
00000300019e9e08 00000000ff356000 8k 8k /usr/lib/libpam.so.1
00000300019e9af8 00000000ff360000 40k /usr/lib/libsocket.so.1
00000300019e9b30 00000000ff37a000 8k 8k /usr/lib/libsocket.so.1
00000300019e9cf0 00000000ff390000 8k /usr/lib/libdl.so.1
00000300019a2158 00000000ff3a0000 8k 8k [ anon ]
00000300019a21c8 00000000ff3b0000 160k /usr/lib/ld.so.1
00000300019a2120 00000000ff3e8000 8k 8k /usr/lib/ld.so.1
00000300019e9d60 00000000ffbec000 16k 16k [ anon ]
I パニックしたときのレジスタ情報
> $<panicbuf
panicbuf+0x218: sync initiated
panicbuf+8: tstate 8800001405
g1 1003a09c
g2 10418000
g3 10418000
g4 7c428
g5 30000425e08
g6 0
g7 2a100045d20
o0 10000000
o1 16
o2 f0000000
o3 0
o4 30000b82728
o5 2
o6 2a100044ca1
o7 1000774c
pc f0045678
npc f004567c
y 0
sfsr 0
sfar 0
tt 17f
|