イントロダクション
ASR5x00 では、show crash コマンドにより過去の crash 情報のリスト、およびその詳しい中身を確認することができます。本コマンドを使用するにあたって事前に把握しておくべき動作仕様がありますので以下に説明します。
注意事項
R14.0 以前などの古いバージョンでは、これから解説する以下の機能が実装されていませんので注意してください。
- リストの最大値に達した時に一番古い crash を上書きする
- マネジメントカード間の crash 情報の同期
- 重複する crash 情報の保存を防ぐ
明確にこのバージョンから動作が変更されているという公開情報はありませんが、show crash number <No.> の出力に Similar Crash Count の表示が確認できれば、上記の機能は実装されています。
[local]asr5500# show crash number 1 | more
********************* CRASH #01 ***********************
SW Version : 15.0(52709)
Similar Crash Count : 2
Time of First Crash : 2014-Apr-12+07:52:09
本ドキュメントでは基本的に上記の機能が実装されているものを「新しいバージョン」、実装されていないものを「古いバージョン」として解説していきます。また、新しいバージョンでも実装変更により動作が変わる可能性もありますのでその点は了承ください。
基本的な使い方
show crash list で過去の crash 情報をリストすることができます。
[local]asr5500# show crash list
== ==== ======= ========== =========== ================
# Time Process Card/CPU/ SW HW_SER_NUM
PID VERSION MIO / Crash Card
== ==== ======= ========== =========== ================
1 2014-Apr-12+07:52:37 sessmgr 03/0/10047 15.0(52709) NA
2 2014-Apr-12+08:11:04 aaamgr 04/0/10054 15.0(52709) NA
Total Crashes : 3
また、show crash number <No.> でcrash 情報の詳細を確認することができます。この内容を確認することで過去に発生した事象と同じであるかなど判断することができます。
[local]asr5500-2# show crash number 97
Sunday April 13 00:04:36 JST 2014
********************* CRASH #97 ***********************
SW Version : 15.0(52709)
Similar Crash Count : 1
Time of First Crash : 2014-Feb-21+14:01:57
Fatal Signal 7: Bus error
PC: [0a3f2377/X] sn_slist_insert()
Faulty address: (nil)
Signal from: kernel
Process: card=6 cpu=0 arch=X pid=7770 cpu=~32% argv0=evlogd
Crash time: 2014-Feb-21+05:01:57 UTC
Recent errno: 11 Resource temporarily unavailable
Stack (19448@0xffff9000):
[0a3f2377/X] sn_slist_insert() sp=0xffff9028
[08a7d360/X] sn_evlgd_evt_circ_buf_write() sp=0xffff9058
[006a0d7d/X] sn_evlgd_st_mem_evt_proc() sp=0xffff9088
[00698de5/X] sn_evlgd_evt_dispatch() sp=0xffff90b8
[00696c01/X] sn_evlgd_ls_evt_proc_real() sp=0xffff90e8
[00696a1f/X] sn_evlgd_ls_evt_proc() sp=0xffffaf68
[0a4afc0b/X] sn_msg_arriving_handle() sp=0xffffd618
[0a48d615/X] sn_loop_run() sp=0xffffdba8
[0a277914/X] main() sp=0xffffdbe8
リストの最大値
将来的には変更があるかもしれませんが、現時点では 120 がリストの最大値になります。新しいバージョンの場合、もし crash 情報の数が最大値に達した場合には一番古い crash 情報が上書きされます。古いバージョンでは上書きされずに新しい crash 情報が保存されません。
show crash list の一番最後に crash 情報の数が表示されます。リストの最大値は 120 ですが、カウントはその制限には当てはまりませんので、120 を超えてもカウントされ続けます。
Total Crashes : 649
また、show crash list の左端に表示されるリスト番号ですが、上述のとおり上書きが発生したりするため必ずしも時系列に番号がふられている訳ではありません。
マネジメントカード間の同期
新しいバージョンでは、マネジメントカード(MIO or SMC) の間で crash 情報が同期されます。古いバージョンでは同期されませんので、例えばマネジメントカードのスイッチオーバーを実施した場合に、今まで見えていた crash 情報が見えなくなる、といったことが起こります。
また、古いバージョンから新しいバージョンにアップグレードした場合、今まで見えていなかった古いバージョンの crash 情報が見えるようになる場合があります。これは、今までスタンバイ側のマネジメントカードに保存されていた crash 情報がアップグレードに伴って同期され、show crash list に見えるようになったからと考えられます。
重複した crash 情報
新しいバージョンでは、既にリストに保存されているものと同じと考えられる crash が発生した場合、カウントだけして crash 情報は保存しません。これは、例えば crash が連続して発生し続けるような不具合の場合に同じ crash 情報でリストが埋め尽くされて他の情報が失われてしまうことを防ぐためになります。
重複かどうかは、バージョン情報、crash タイプ、プログラムカウンター、スタックトレースなどから判断されます。重複の場合は show logs に以下のようなメッセージが記録されます。
2014-Feb-27+01:44:05.657 [evlog 2133 info] [5/0/7632 <evlogd:0> odule_persist.c:2148] [software internal system critical-info syslog] Evlogd crashlog: duplicate crash record received, overwrite slot 85
また、show crash number <No.> で重複した crash のカウントと最初に発生した日時を確認できます。
[local]asr5500-2# show crash number 97
Sunday April 13 00:04:36 JST 2014
********************* CRASH #97 ***********************
SW Version : 15.0(priva)
Similar Crash Count : 1
Time of First Crash : 2014-Feb-21+14:01:57