やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20090528 2009年 5月 28日 木曜日

Solaris Crash Analysis Tool 5.1

システムの panic 等で採取される crash dump (/var/crash 配下に格納される)ですが、この中身を覗いてみたくなったこととかありませんか?
今回、ご紹介する Solaris Crash Analysys Tool (以下 SolarisCAT)は、採取された crash dump を解析するためのツールとなり、Solaris 2.6 から Solaris 10 および OpenSolaris をサポートしています。また、採取済みの crash dump 以外にも、稼働中のシステムの情報を採取することも可能です。
(CPU アーキテクチャが異なる環境では、crash dump の解析ができませんのでご注意ください。たとえば、SPARC 上で採取されたものを x86 環境で解析することはできず、その逆も同様となります。)

Solaris CAT は、下記 URL から入手可能です。

Solaris Crash Analysis Tool 5.1
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_SMI-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=SCAT-5.1-G-F@CDS-CDS_SMI

パッケージ形式での配布となりますので、download 後に pkgadd コマンドでシステムにインストールすることになります。コマンド群は、/opt/SUNWscat に配置され、マニュアルは HTML ファイル (/opt/SUNWscat/docs) にて提供されます。基本的なインターフェースは、CUI (/opt/SUNWscat/bin/scat コマンド)となり対話形式にて操作することが可能です。 引数を与えずに scat を起動すると下記のメッセージが表示されます。

--
# /opt/SUNWscat/bin/scat            

  Solaris[TM] CAT 5.1b for Solaris 11 64-bit x64
    SV4842, Feb 24 2009

  Copyright 2009 Sun Microsystems, Inc. All rights reserved.
  Use is subject to license terms.

  Feedback regarding the tool should be sent to SolarisCAT_Feedback@Sun.COM
  Visit the Solaris CAT blog at http://blogs.sun.com/SolarisCAT

opening /dev/ksyms /dev/kmem ...symtab...core...done
loading core data: modules...symbols...CTF...done

files:		/dev/ksyms /dev/kmem
user:		Super-User (root:0)
release:	5.11 (64-bit)
version:	snv_114
machine:	i86pc
node name:	macbook
system type:	i86pc
hostid:		4fd7cf4c
dump_conflags:	0x10000 (DUMP_KERNEL) on /dev/zvol/dsk/rpool/dump(1G)
time in kernel:	Thu May 28 11:35:29 JST 2009
age of system:	3 hours 28 minutes 53.88 seconds
CPUs:		2 (3.72G memory)

sanity checks: settings...vmem...sysent...misc...done
SolarisCAT(live/11X)> 
--

試しに、採取された crash dump を覗いてみるには、下記のように実行します。analyze コマンドは、crash dump を自動的に解析し、原因究明への一歩を手助けしてくれる情報を出力してくれます。

--
# /opt/SUNWscat/bin/scat /var/crash/$HOSTNAME/vmcore.0

SolarisCAT(vmcore.0/11X)> analyze

core file:	/var/crash/macbook/vmcore.0
user:		Super-User (root:0)
release:	5.11 (64-bit)
version:	Apr_30_11:53_2009
machine:	i86pc
node name:	macbook
system type:	i86pc
hostid:		4fd7cf4c
dump_conflags:	0x10000 (DUMP_KERNEL) on /dev/zvol/dsk/rpool/dump(1G)
time of crash:	Thu Apr 30 19:48:38 JST 2009 (core is 27 days old)
age of system:	4 minutes 25.10 seconds
panic CPU:	1 (2 CPUs, 3.72G memory)
panic string:	BAD TRAP: type=e (#pf Page fault) rp=ffffff0008da6a30 addr=20 occurred in module "unix" due to a NULL pointer dereference


==== checking for trap information ====

CPU 1 had the panic


==== panic thread: 0xffffff01be4aa000 ==== CPU: 1 ====
==== panic kernel thread: 0xffffff01be4aa000  PID: 0  on CPU: 1 ====
cmd: 
t_procp: 0xffffff01cffe7e10
  p_as: 0x0t_stk: 0xffffff0008da6f10  sp: 0xffffff0008da6790  t_stkbase: 0x0
t_pri: 60(FX)  pctcpu: 0.000000
t_lwp: 0x0  address translation failed for cpupart: 320 bytes @ 0xfed00000
bound psrset: -70932464  last CPU: 1  
idle: 1092044344150 ticks (126394 days 30 minutes 41.50 seconds)
start: Wed Jul 19 11:24:56 .*.*
age: 1092968065422 seconds (12650093 days 8 hours 23 minutes 42 seconds)
tstate:	TS_ONPROC - thread is being run on a processor
tflg:	T_PANIC - thread initiated a system panic
	T_DFLTSTK - stack is default size
tpflg:	TP_TWAIT - wait to be freed by lwp_wait
	TP_MSACCT - collect micro-state accounting information
tsched:	TS_LOAD - thread is in memory
	TS_DONT_SWAP - thread/LWP should not be swapped
	TS_SIGNALLED - thread was awakened by cv_signal()
pflag:	none set

pc:      unix:vpanic_common+0x13b:  addq   $0xf0,%rsp

unix:vpanic_common+0x13b()
unix:panic+0x94()
unix:die+0xdd()
unix:trap+0x175f()
unix:cmntrap_pushed+0x3d()
unix:mutex_enter+0xb()
klmmod:lm_svc+0x45()
nfs:nfssys+0x448()
unix:_sys_sysenter_post_swapgs+0x14b()
-- end of kernel thread's stack --


==== analyzing panic thread stack for trap frames ====

  no trap frames found
--

また、稼働中のシステムの様々な情報も取得することが可能です。
例として、メモリ情報やページ情報を確認するには、下記のように実行します。


[メモリ情報の確認]

--
SolarisCAT(live/11X)> meminfo
                              pages        bytes
physinstalled                976919   4001460224 (3.72G)
physmem                      974870   3993067520 (3.71G)
total_pages                  974869   3993063424 (3.71G)

freemem                      375851   1539485696 (1.43G)
avefree                      381934   1564401664 (1.45G)
avefree30                    374878   1535500288 (1.43G)
availrmem (nonswapable)      683612   2800074752 (2.60G)
availrmem_initial            974869   3993063424 (3.71G)
swapfs_minfree               121858    499130368 (476M)
sw_pending_size                            40960 (40K)

lotsfree                      15232     62390272 (59.5M)
desfree                        7616     31195136 (29.7M)
minfree                        3808     15597568 (14.8M)
throttlefree                   3808     15597568 (14.8M)

lookup failed for symbol segvn_pages_locked: symbol not found
pp_kernel(calculated)        290845   1191301120 (1.10G)
obp_pages                       512      2097152 (2M)
kcage_on:                0

shared memory (SM)                        540672 (528K)
intimate SM (ISM)                              0 (0)
dynamic ISM (DISM)                             0 (0)
locked DISM                       0            0 (0)
total locked SM                                0 (0) (0.00% of memory)
spt_used (ISM)                    0            0 (0)
segspt_minfree                    0            0 (0)

anoninfo: (physical == disk-backed)
  ani_max - total reservable physical swap                 488447 pages (1.86G)
  ani_free - unallocated physical and memory               220853 pages (862M)
  ani_phys_resv - reserved physical                        341070 pages (1.30G)
  ani_mem_resv - reserved memory                                0 pages (0)
  ani_locked_swap - swap locked in reserved mem swap            0 pages (0)

initial virtual swap available for reservation            1341458 pages (5.11G)
  ani_max + MAX((availrmem_initial - swapfs_minfree), 0)
current virtual swap available for reservation             709131 pages (2.70G)
  (ani_max - ani_phys_resv) + MAX((availrmem - swapfs_minfree), 0)

swap device                    pages           free
/dev/zvol/dsk/rpool/swap  488447 (1.86G)  488447 (1.86G)

tmpfs:
tmount          size  mount point
0xffffff01bc091140   456K  /etc/svc/volatile
0xffffff01be771918  6.10M  /tmp
0xffffff01be80a108    52K  /var/run
--

[ページ情報の確認]

--
# /opt/SUNWscat/bin/scat            
SolarisCAT(live/11X)> page summary
reading page table...
reading page_freelists...                                                     
reading page_cachelists...                                                    
reading page_hash...                                                          
                                                                              
total:               974869 (3.71G)
mapped:              545810 (2.08G)
unmapped:            429059 (1.63G)
modified:            238948 (933M)
read-only:                0 (0)
locked in memory:    273714 (1.04G)
soft locked:              0 (0)
shared-locked:       291166 (1.11G)
excl-locked:             63 (252K)
IO_INUSE:                 1 (4K)
FREE pages:          380541 (1.45G)
AGED pages:          230701 (901M)
NORELOC pages:            0 (0)

kernel(kvp):         171113 (668M)
anon:                242316 (946M)
exec:                  9163 (35.7M)
page cache:          168381 (657M)
page cache(mod):       1687 (6.58M)
free (cachelist):    149840 (585M)
NULL vnode !free:      3355 (13.1M) (ramdisk?)

free (freelist):     230701 (901M)

freelist:            227066 pages
       pages      pagesize
  =============== ========
   227059 (886M)  4K
        7 (14M)   2M

  total size:     944713728 (900M)
  constituent:         3577 pages

cachelist:           149429 (583M)

hashed:              740874 (2.82G)
       pages      pagesize
  =============== ========
   719370 (2.74G) 4K
    21504 (84M)   2M

     pages         modified         mapped      vnode
=============== =============== =============== =====
 234056 (914M)        0               1 (4K)    0
 171113 (668M)        0          141084 (551M)  unix(data):kvp+0x0  
 114705 (448M)        0          114705 (448M)  unix(data):zvp+0x0  
  24522 (95.7M)       0             510 (1.99M) 0xffffff01cd37f100  
   8688 (33.9M)       0             158 (632K)  0xffffff01cf1ca580  
   7914 (30.9M)       0            3791 (14.8M) 0xffffff01d0d33600  
   6160 (24M)         0            5214 (20.3M) 0xffffff01ccebe080  
...

     pages         modified         mapped      vnode ops
=============== =============== =============== =========
 285819 (1.09G)       0          255789 (999M)  0
 265316 (1.01G)  237261 (926M)   241334 (942M)  *genunix(bss):swap_vnodeops
 152844 (597M)        0           46491 (181M)  *zfs(bss):zfs_fvnodeops
  22657 (88.5M)       0            2168 (8.46M) 0xffffff01bb20b380
  12487 (48.7M)       0               0         *nfs(bss):nfs4_vnodeops
   1687 (6.58M)    1687 (6.58M)      27 (108K)  *tmpfs(bss):tmp_vnodeops
      3 (12K)         0               0         *specfs(bss):spec_vnodeops

--