この節では、クラッシュダンプを有効または無効にする方法と、システムメッセージを表示または収集する方法について説明します。
この章で説明する手順は次のとおりです。
システムクラッシュは、ハードウェアの誤動作、電源の異常、入出力の障害、およびソフトウェアのエラーが原因で発生します。ソフトウェアの突然異常 (たとえば、オペレーティングシステムのバグによる致命的なカーネルエラーなど) によってシステムがクラッシュした場合、システムはその物理メモリーのイメージを、ディスクのスワップスライスの最後に core ファイルとして書き込みます。このファイルはカーネルの状態のスナップショットであり、クラッシュ時に捕捉されたプログラムのテキスト、データ、および制御構造体を含んでいます。
UNIX システムがクラッシュしたときに書き込まれるクラッシュダンプ、つまり core ファイルは、カーネルのデバッグに熟練した人が使用すれば、クラッシュの原因を突き止める鍵となります。しかし、システムで core ファイルをクラッシュダンプファイルに保存することを有効にしていなければ、UNIX システムがクラッシュ後にリブートすると、通常の場合は、生成されていた core ファイルが上書きされてしまいます。
システムがクラッシュダンプファイルを保存することを有効にする方法の詳細は、「クラッシュダンプの使用方法の作業マップ」を参照してください。クラッシュダンプファイルは非常に大きくなる可能性があるため、不要なものは削除してください。
制御構造体、アクティブなテーブル、動作中またはクラッシュしたシステムカーネルのメモリーのイメージなど、カーネルの動作についての情報を調べるには、crash ユーティリティを使用します。crash を完全に使いこなすには、カーネルについての詳細な知識が必要ですが、このマニュアルでは扱いません。crash ユーティリティの動作の詳細は、crash(1M) のマニュアルページを参照してください。
また、crash で保存したクラッシュダンプを購入先に送って、システムがクラッシュした原因を解析してもらうことも可能です。購入先にクラッシュダンプファイルを送る場合は、「クラッシュダンプの使用方法の作業マップ」にリストされている最初の 3 つの作業を実行してください。
作業 |
説明 |
手順の説明 |
|||||
---|---|---|---|---|---|---|---|
クラッシュダンプディレクトリを作成する |
/var/crash/system-name ディレクトリを作成して、クラッシュダンプファイルを格納する。 | ||||||
クラッシュダンプファイル用の容量を確保する |
クラッシュダンプファイル用に割り当てるディスク容量を決定する。 | ||||||
| |||||||
クラッシュダンプファイルを有効にする |
/etc/init.d/sysetup ファイルを編集して、クラッシュダンプファイルの保存を有効にする。 | ||||||
| |||||||
クラッシュダンプファイルを調査する |
crash コマンドを使用して、クラッシュダンプファイルを表示する。 | ||||||
| |||||||
クラッシュダンプファイルを無効にする |
(省略可能) /etc/init.d/sysetup ファイルを編集して、クラッシュダンプファイルの保存を無効にする。 | ||||||
|
システムにクラッシュダンプを保存させるには、次の手順に従ってください。
クラッシュダンプディレクトリを作成します。
クラッシュダンプファイル用に割り当てるディスク容量を決定します。
/etc/init.d/sysetup ファイルを編集して、クラッシュダンプファイルの保存を有効にします。
システムにクラッシュダンプを保存させないようにするには、この逆の手順に従います。
スーパーユーザーになります。
# mkdir /var/crash
/var/crash ディレクトリに移動します。
# cd /var/crash
システム名でディレクトリを作成します。
# mkdir system-name
system-name |
クラッシュダンプファイルを保存するシステム |
ディレクトリが作成されていることを確認します。
# ls system-name
次の例は、システム saturn のクラッシュダンプファイルを保存するディレクトリを作成する方法を示しています。
# mkdir /var/crash # cd /var/crash # mkdir saturn # ls saturn
表 69-1 に示している必要な作業を完了していることを確認します。
/var/crash/system-name ディレクトリに移動します。
# cd /var/crash/system-name
system-name |
クラッシュダンプファイルを保存するシステム |
任意のエディタで、クラッシュダンプ用に確保しておく最小利用可能空き領域の最小値を指定する数 (単位はキロバイト) を含む、minfree という名前のファイルを作成します。
ファイルを終了して、変更を保存します。
次の例は、システム saturn のクラッシュダンプファイルを保存するための、500K バイトの利用可能な空き領域を確保する、minfree ファイルの内容を示しています。
$ more /var/crash/saturn/minfree 500
表 69-1 に示している必要な作業を完了していることを確認します。
スーパーユーザーになります。
任意のエディタで、/etc/init.d/sysetup ファイルを編集し、クラッシュダンプを有効にする行の先頭からコメント記号 (#) を削除して、これらの行を有効にします。
変更を保存し、編集を終了します。
次の例は、クラッシュダンプを有効にするように編集した /etc/init.d/sysetup ファイルの該当セクションを示しています。
## ## Default is to not do a savecore ## if [ ! -d /var/crash/`uname -n` ] then mkdir -m 0700 -p /var/crash/`uname -n` fi echo 'checking for crash dump...¥c ' savecore /var/crash/`uname -n` echo ''
スーパーユーザーになります。
crash ユーティリティを使用して、クラッシュダンプを調査します。
# /usr/sbin/crash [-d crashdump-file] [-n name-list] [-w output-file]
-d crashdump-file |
システムのメモリーイメージが格納されているファイルを指定する。デフォルトのクラッシュダンプファイルは /dev/mem である |
-n name-list |
システムのメモリーイメージへシンボルでアクセスを調査する場合、シンボルテーブル情報が格納されるテキストファイルを指定する。デフォルトのファイル名は /dev/ksyms である |
-w output-file |
クラッシュセッションからの出力を格納するファイルを指定する。デフォルトは標準出力である |
クラッシュ状態情報を表示します。
# /usr/sbin/crash dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout > status . . . > size buf proc queue . . .
次の例は、crash ユーティリティからのサンプル出力を示しています。状態とバッファについての情報、プロセス、および待ち行列のサイズが表示されています。
# /usr/sbin/crash dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout > status system name: SunOS release: 5.6 node name: saturn version: Generic machine name: sun4m time of crash: Fri Jan 10 14:14:39 1997 age of system: 60 day, 5 hr., 24 min. panicstr: panic registers: eip: 0 esp: 0 > size buf proc queue 120 1552 88
/etc/init.d/sysetup ファイルを編集して、次に示すように各行の先頭にコメント記号 (#) を挿入します。
#if [ ! -d /var/crash/`uname -n` ] #then mkdir -p /var/crash/`uname -n` #fi # echo `checking for crash dump...¥c ` #savecore /var/crash/`uname -n` # echo ''
変更を保存します。
/var/crash ディレクトリからクラッシュダンプ用のファイルを削除します。
# rm -rf /var/crash/system-name
system-name |