この章では,システム・クラッシュ・ダンプの構成方法と作成方法,クラッシュ・ダンプとそれに関連するデータを保存する方法 (グラフィカル・ユーザ・インタフェースを使用する方法と手動で行う方法) について説明します。 クラッシュ・ダンプは,システムの予期しないシャットダウン時に自動的に取得される,実行中のカーネルのスナップショットです。 クラッシュ・ダンプは,テクニカル・サポート担当者に連絡した際に,システム・クラッシュの原因となった問題の分析および修正のためによく参照されます。 ただし,経験豊富なシステム管理者や開発者の場合は,クラッシュ・ダンプの解析方法に慣れていれば,自分でクラッシュ・ダンプの取得と解析を行うこともできます。
この章では,次のトピックについて説明します。
クラッシュ・ダンプの概要 (14.1 節)
クラッシュ・ダンプの構成用と「スナップショット」の作成用の新しい 2 つのグラフィカル・ユーザ・インタフェース (14.2 節)
クラッシュ・ダンプの作成方法 (14.3 節)
クラッシュ・ダンプの内容および方式の選択方法 (14.4 節)
手動でクラッシュ・ダンプを取得する方法 (14.5 節)
クラッシュ・ダンプの保存およびアーカイブ方法 (14.6 節)
システムは予期しないシャットダウン時に,物理メモリ上のデータのすべてまたは一部を,(a) ディスクのスワップ領域 (仮想メモリ領域) または (b) メモリのいずれかに書き込みます。
このようなシャットダウンは,一般にシステム・クラッシュまたはパニックと呼ばれます。
格納されたデータおよびステータス情報は,クラッシュ・ダンプと呼ばれます。
クラッシュ・ダンプは,アプリケーションで生成された,コア・ダンプとは異なります。
コア・ダンプの場合は,通常,出力後もシステムは動作を続けます。
クラッシュ・ダンプ後は,システムはシャットダウンされてコンソール・プロンプト (>>>
) が表示されます。
auto_action
Boot Halt Restart オプションの指定に応じて,リブートが必要だったり,必要でなかったりします。
リブート処理の際に,システムはクラッシュ・ダンプをファイルに移動し,カーネルの実行可能イメージを他のファイルにコピーします。 これらのファイルをまとめてクラッシュ・ダンプ・ファイルと呼びます。 クラッシュ・ダンプ・ファイルは,システムがクラッシュしたときの分析のために,またはカスタム・カーネルの開発 (デバッグ) の際に必要です。 システムの問題を分析するために,テクニカル・サポート部門へのクラッシュ・ダンプ・ファイルの提供が必要になる場合もあります。
クラッシュ・ダンプを管理するには,クラッシュ・ダンプ・ファイルがどのように作成されるかを理解する必要があります。
クラッシュ・ダンプとクラッシュ・ダンプ・ファイル用に,ディスク上に空きスペースを確保しなければなりません。
確保するスペースの量は,システム構成と選択したクラッシュ・ダンプのタイプによって異なります。
14.1.1 関連ドキュメントとユーティリティ
クラッシュ・ダンプでは,ディスク上に確保されている仮想メモリ・スワップ領域が使用されます。
スワップ領域の管理については,第 3 章を参照してください。
システム・イベント管理については,binlogd
および
syslogd
イベント管理チャネルの説明がある第 12 章を参照してください。
クラッシュ・ダンプの詳細と関連トピックは,マニュアル
と
リファレンス・ページを参照してください。
14.1.1.1 マニュアル
クラッシュ・ダンプや関連するトピックが記載されているマニュアルを,以下に示します。
『Kernel Debugging』では,クラッシュ・ダンプの分析方法について説明しています。 この機能を使用するためには,ソフトウェア開発サブセットおよび適切なライセンスをインストールする必要があります。
『インストレーション・ガイド』では,インストレーション時に構成される初期スワップ領域とダンプ設定について説明しています。
以下に示すリファレンス・ページには,関連ユーティリティに関する詳細情報があります。
savecore
(8)コア・ダンプをスワップ・パーティションまたはメモリからファイルにコピーするプログラムです。
expand_dump
(8)カーネル・クラッシュ・ダンプ・ファイルの圧縮を解除します。
dumpsys
(8)システムを停止せずに,メモリのスナップショットをダンプ・ファイルにコピーします。 これは継続ダンプとも呼ばれ,ダンプ構成を計画する際の,クラッシュ・ダンプ・サイズの見積りに役立ちます。
sysconfig
(8)sysconfigdb
(8)カーネル・サブシステムの構成を保守し,カーネルにおけるクラッシュ・ダンプの属性を設定してクラッシュ動作を制御するために使用されるプログラムです。
カーネル・チューナ・グラフィカル・ユーザ・インタフェース (/usr/bin/X11/dxkerneltuner
) を使用してカーネル属性を変更することも可能です。
詳細については,
dxkerneltuner
(8)
swapon
(8)ページングおよびスワッピング用にファイルを追加するプログラムです。 フル・ダンプを作成するために,一時または永続スワップ領域を追加する必要がある場合に,このコマンドを使用します。
dbx
(1)ソース・レベル・デバッガです。
クラッシュ・ダンプの構成や作成を行うアプリケーションが,SysMan Menu から使用できます。
このアプリケーションを使用して,savecore
コマンドに関連付けられた汎用システム構成変数を構成します。
このアプリケーションを使用して,メモリのスナップショットを手動でダンプするための
dumpsys
コマンドを構成します。
詳細は,14.2 節を参照してください。
14.1.2 クラッシュ・ダンプ時に使用されるファイル
特に指定しなければ,savecore
コマンドでは,クラッシュ・ダンプ・ファイルが
/var/adm/crash
ディレクトリにコピーされますが,指定した任意のファイル・システムにクラッシュ・ダンプをリダイレクトすることもできます。
また,リモート・ホストにリダイレクトすることもできます。
他の多くのシステム・ディレクトリと同じように,/var/adm/crash
ディレクトリはコンテキスト依存シンボリック・リンク (CDSL) であり,システムとクラスタを結合する機能を果たします。
このディレクトリの CDSL は
/var/cluster/members/member0/adm/crash
です。
このディレクトリでは,次のファイルが作成または使用されます。
/var/adm/crash/bounds
次のダンプの増分番号を指定するテキスト・ファイル (vmzcore.n
の
n
)
/var/adm/crash/minfree
クラッシュ・ダンプ・ファイルが書き込まれた後,最低何 KB 残すかを指定するファイル
/var/adm/crash/vmzcore.n
クラッシュ・ダンプ・ファイル。
ファイルが圧縮されていない場合は,vmcore.n
という名前 (z
がない)
/var/adm/crash/vmunix.n
クラッシュ時に実行していたカーネルのコピーで,通常は
/vmunix
/etc/syslog.conf
,/etc/binlog.conf
,および
/etc/evmdaemon.conf
ロギング構成ファイル
クラッシュ・ダンプの構成を簡単にするアプリケーションと,クラッシュ・ダンプ・ファイルを手動で作成するアプリケーションがあります。 これらのアプリケーションは,SysMan Menu の「サポートとサービス」ブランチにあります。
最初のアプリケーションは,「システム・ダンプの構成」 です。 目的は,システム・ダンプのパラメータを構成して,将来クラッシュ・ダンプが発生したときに,適切な情報を得ることです。
2 番目のアプリケーションは,「ダンプ・スナップショットの作成」 です。
これを使用すると,各種のオプションを設定でき,クラッシュ・ダンプを作成するためにシステムを停止できない場合に,メモリのスナップショットをファイルに格納できます。
14.2.1 「システム・ダンプの構成」アプリケーションの使用方法
「システム・ダンプの構成」アプリケーションを使用すると,クラッシュ・ダンプ・データを必要に応じてカスタマイズできます。 このアプリケーションを使用すると,将来クラッシュ・ダンプが発生したときにクラッシュ・ダンプ・ファイルに影響する,各種のオプションを設定できます。
SysMan Menu で「サポートとサービス」を選択して,「ダンプの設定
」を選択すると,このアプリケーションにアクセスできます。
図 14-1
に,このアプリケーションのメイン・ウィンドウを示します。
図 14-1: 「システム・ダンプの構成」アプリケーション
SysMan Menu でこのアプリケーションを起動すると,以下の情報を設定できます。
1 番目の項目「ダンプを有効にする
」では,次のいずれか 1 つを選択します。
クラッシュ・ダンプを作成するメカニズムを無効にします。
メカニズムを有効にして,クラッシュ・ダンプが発生したとき,クラッシュ・ダンプ・ファイルが 1 セット (クラッシュ・ダンプ・ファイルとカーネルのコピー) 書き込まれるようにします。
これも,メカニズムを有効にして,クラッシュ・ダンプが発生したとき,クラッシュ・ダンプ・ファイルが 1 セット書き込まれるようにします。 このオプションでは,クラッシュ・ダンプ・ファイルの書き込み中にさらに追加のシステム障害が発生した場合に,追加のクラッシュ・ダンプ・ファイル・セットも書き込まれます。
2 番目の項目では,フル・ダンプまたは部分ダンプの選択を行います。
フル・ダンプは,クラッシュ・ダンプ・ヘッダ情報とすべての物理メモリを保存します。
部分ダンプは,クラッシュ・ダンプ・ヘッダと物理メモリの一部のコピーを保存します。 一部の物理メモリとは,システム・クラッシュの発生時点の重要な情報を含むと考えられる部分です。
「圧縮を行う
」チェック・ボックスをチェックすると,クラッシュ・ダンプ・ファイルを圧縮できます。
特に理由がない限り,圧縮は必ず有効にしておきます。
次の項目「ダンプ先
」では,クラッシュ・ダンプ・データの保存方法を指定します。
クラッシュ・ダンプ・ファイルをディスクに保存します。 これが失敗すると,圧縮された部分的なメモリ・ダンプが試みられます。
クラッシュ・ダンプ・ファイルをメモリ領域に保存します。
クラッシュ・ダンプ・ファイルをディスクに保存します。 これが失敗しても,圧縮された部分的なメモリ・ダンプは試みられません。
最後の項目では,クラッシュ・ダンプ・ファイルを除外メモリにダンプするか,しないかを指定します。
除外メモリにダンプする場合は,「除外するメモリの指定
」チェック・ボックスをチェックします。
これにより,次の 2 つのフィールドに値が指定できるようになります。
ダンプの保存先の開始アドレスを指定します。
メモリ領域のサイズを指定します。
注意
これらのフィールドは,10 進数または 16 進数で指定できます。 16 進数の場合には,先頭に
0x
を付けてください。
「システム・ダンプの構成」アプリケーションには,詳細情報が記載されたオンライン・ヘルプがあります。
14.2.2 「ダンプ・スナップショットの作成」アプリケーションの使用方法
図 14-2 で示した 「ダンプ・スナップショットの作成」アプリケーションを使用すると,システム・メモリのスナップショットをダンプ・ファイルに保存できます。
SysMan Menu で「サポートとサービス」を選択して,「ダンプ・スナップショットの作成
」を選択すると,このアプリケーションにアクセスできます。
図 14-2
に,このアプリケーションのメイン・ウィンドウを示します。
図 14-2: 「ダンプ・スナップショットの作成」アプリケーション
SysMan Menu でこのアプリケーションを起動すると,以下の情報を設定できます。
フル・ダンプと部分ダンプのどちらかを選択します。
データの圧縮を行うかどうかを指定します。
圧縮する場合,「圧縮比 %
」スライド・バーを使用して,圧縮率を指定します。
小さな値を指定するほど,(可能な限り) 圧縮率が高くなります。
隣接するゼロの圧縮を行うかどうかを,「連続するゼロの省略を行わない
」チェック・ボックスで指示します。
この圧縮はお勧めしません。
クラッシュ・ダンプ・データを保存するのに十分な領域がない場合でもアプリケーションによる警告が必要でない場合は,「スペース不足の警告を無視する
」チェック・ボックスをチェックします。
「ダンプ・ディレクトリ
」フィールドに,クラッシュ・ダンプ・ファイルが書き込まれるディレクトリの絶対パス名を入力します。
そのディレクトリで使用可能な領域のサイズが,「次の容量が利用可能です
」フィールドに M バイト単位で表示されます。
その表示フィールドを更新するには,[MBの更新
] を選択します。
「ダンプ・スナップショットの作成」アプリケーションには,詳細情報が記載されたオンライン・ヘルプがあります。
14.3 クラッシュ・ダンプの作成
システム・クラッシュの後,通常,コンソール・プロンプトから
boot
コマンドを入力してシステムをリブートします。
システムのリブート中に,savecore
コマンドは,クラッシュ・ダンプ情報をスワップ・パーティションまたはメモリからファイルに移動し,クラッシュ時に実行中だったカーネルを別のファイルにコピーします。
これらのファイルを分析すれば,クラッシュの原因を究明するのに役立ちます。
savecore
コマンドはまた,クラッシュをシステム・ログ・ファイルに記録します。
savecore
コマンドは,コマンド行から起動することもできます。
詳細は,
savecore
(8)14.3.1 generic サブシステムのダンプ・カーネル属性の設定
次のように
generic
サブシステムで定義されたカーネル属性を設定することで,クラッシュ・ダンプを行う方法を制御することができます。
dump_savecnt
クラッシュとリブートのシーケンス 1 回で生成される正常なクラッシュ・ダンプの数を制限するか,ダンプを使用不可にします。 14.3.2 項を参照してください。
dump_to_memory
1 次システム・コア・ダンプをメモリに書き込むかディスクに書き込むかを指定します。 14.3.2 項を参照してください。
dump_sp_threshold
クラッシュ・ダンプが書き込まれるパーティションを制御します。 省略時の値を使用すると,1 次スワップ・パーティションに十分に収まるサイズのクラッシュ・ダンプに対して,1 次スワップ・パーティションが排他的に使用されます。 14.3.4 項を参照してください。
dump_user_pte_pages
部分クラッシュ・ダンプにユーザ・ページ・テーブルを含めるかどうかを指定します。 この属性は,省略時はオフです。 14.4.2 項を参照してください。
expected_dump_compression
システムに通常達成させたい圧縮のレベルを指定します。 省略時の設定は 500 ですが,0 〜 1000 の整数を設定することができます。 14.4.4 項を参照してください。
partial_dump
部分クラッシュ・ダンプとフル・クラッシュ・ダンプのどちらを取得するかを指定します。 この属性は,省略時はオンです。 14.4.3 項を参照してください。
compressed_dump
スペースを節約するためにダンプを圧縮するかどうかを指定します。 この属性は,省略時はオンです。 オフを設定していても,別のダンプ属性の値により自動的にオンが設定されることがあります。 14.4.5 項と14.4.6 項を参照してください。
dump_kernel_text
ダンプにカーネルのテキスト・ページを含めて大きなダンプ・ファイルを作成するかどうかを指定します。 この属性は,部分ダンプが使用可能なときのみ適用されます。 14.4.3 項を参照してください。
live_dump_dir_name
継続ダンプを書き込むディレクトリの完全パスを指定します。 14.5.1 項を参照してください。
live_dump_zero_suppress
継続ダンプのゼロ圧縮を有効にするか無効にするかを指定します。 ダンプ・ファイルの作成に時間がかかりますが,使用スペースは小さくなります。 14.5.1 項を参照してください。
除外メモリが使用可能な場合,除外メモリへのダンプが次の属性で制御されます。
dump_exmem_addr
1 次ダンプの書き込みに使用する除外メモリ領域の開始アドレス (仮想または物理) を指定します。
dump_exmem_size
ダンプを書き込む除外メモリ領域の大きさ (バイト) を指定します。
dump_exmem_include
ダンプに除外メモリ・ページを含めるかどうかを指定します。
この機能の詳細は,14.4.6 項を参照してください。
次のコマンドは,一般的なダンプ属性の設定内容を表示します。
# sysconfig -q generic | grep dump compressed_dump = 1 dump_exmem_addr = 0 dump_exmem_size = 0 dump_exmem_include = 0 dump_kernel_text = 0 dump_savecnt = 1 dump_sp_threshold = 4096 dump_to_memory = 0 dump_user_pte_pages = 0 expected_dump_compression = 500 live_dump_zero_suppress = 1 live_dump_dir_name = /var/adm/crash partial_dump = 1
ダンプ属性とダンプ設定の詳細は,
sys_attrs_generic
(5)sysconfig
(8)sysconfigdb
(8)14.3.2 クラッシュ・ダンプ・ファイルの作成
savecore
コマンドは,リブート処理時に実行を始めると,クラッシュ・ダンプが発生したかどうか,およびファイル・システムにそれを保存するのに十分なスペースがあるかどうかを判断します (システムをシャットダウンしてリブートした場合,クラッシュ・ダンプは保存されません。
すなわち,システムがクラッシュした場合のみ,クラッシュ・ダンプが保存されます)。
dump_savecnt
属性の値は,ダンプの数を制御します。
使用できる値は次のとおりです。
(ゼロ)
(zero)クラッシュ・ダンプを生成することはありません。
1
1 次クラッシュ・ダンプを生成します (省略時の設定)。
2
2 次クラッシュ・ダンプを生成します。
dump_to_memory
属性の値は,ダンプの位置を制御し,次のように
dump_savecnt
属性の値と連携して機能します。
-1
メモリへのダンプの書き込みを不可にします。
この値は,dump_savecnt
属性の値が 2 のときに 2 次ダンプの書き込みも無効にします。
0
(zero)ディスク障害のイベント以外の場合は,ディスクにダンプが書き込まれます。 ディスク障害の場合は,メモリに書き込まれます。 これは,省略時の動作です。
1
十分なメモリがあるときは,ダンプはメモリだけに書き込まれます。
例外は,2 次ダンプが有効になっている場合です (dump_savecnt=2
)。
詳細は,
sys_attrs_generic
(5)
場合によっては,メモリ内のダンプは重ね書きされる可能性があります。 重ね書きを防ぐために,除外メモリと呼ばれるメモリの保護領域にダンプを書き込むこともできます。 詳細は,14.4.6 項を参照してください。
クラッシュ・ダンプが存在し,ファイル・システムにクラッシュ・ダンプ・ファイルを保存するのに十分なスペースがある場合,savecore
コマンドは,クラッシュ・ダンプとカーネルのコピーを省略時のクラッシュ・ディレクトリ (/var/adm/crash
) 内のファイルに移動します (クラッシュ・ディレクトリの位置は変更できます)。
次の操作を選択できます。
14.4.7 項で説明しているように,ネットワーク接続を使って,すべてのクラッシュ・ファイルをリモート・ホストに書き込みます。
14.5.1 項で説明しているように,継続ダンプ・ファイルを代替ディレクトリに書き込みます。
savecore
コマンドは,カーネル・イメージを
vmunix.n
ファイルに格納します。
また,省略時の設定では,物理メモリの内容 (圧縮済み) を
vmzcore.n
ファイルに格納します。
変数
n
は,クラッシュの番号を示します。
このクラッシュの番号は,クラッシュ・ディレクトリの
bounds
ファイルに記録されます。
最初のクラッシュが起こると,savecore
コマンドは
bounds
ファイルを作成し,その中に数字の 1 を格納します。
このコマンドは,その後,クラッシュが起こるたびに,その値をカウントアップします。
savecore
コマンドは,コマンドの実行前にシステム・スワッピングがほとんどまたはまったく発生しないように,リブート処理の早い時期に実行されます。
これにより,スワップによってクラッシュ・ダンプが壊されないことが保証されます。
14.3.3 クラッシュ・ダンプのロギング
savecore
コマンドは,クラッシュ・ダンプ・ファイルを書き込むと,次の手順を行ってクラッシュをシステム・ログ・ファイルにロギングします。
リブート・メッセージを
/var/adm/syslog/auth.log
ファイルに書き込みます。
パニック状態のためにシステムがクラッシュした場合は,パニック文字列がログ・エントリに含められます。
syslog.conf
ファイルの
auth
ファシリティ・エントリを変更することにより,savecore
コマンドが,リブート・メッセージを別のファイルに書き込むように設定することができます。
syslog.conf
ファイルから
auth
エントリを削除すると,savecore
コマンドはリブート・メッセージを保存しなくなります。
クラッシュ・ダンプのカーネル・メッセージ・バッファの保存を試みます。
カーネル・メッセージ・バッファには,クラッシュしたカーネルが作成したメッセージが入っています。 これらのメッセージは,クラッシュの原因を究明する際に役立つことがあります。
省略時の設定では,savecore
コマンドは,カーネル・メッセージ・バッファを
/var/adm/crash/msgbuf.savecore
ファイルに保存します。
savecore
がカーネル・メッセージ・バッファを書き込む位置は,/etc/syslog.conf
ファイルの
msgbuf.err
エントリを変更することにより変更できます。
/etc/syslog.conf
ファイルの
msgbuf.err
エントリを削除すると,savecore
は,カーネル・メッセージ・バッファを保存しなくなります。
その後,リブート処理で
syslogd
デーモンが起動し,msgbuf.err
ファイルの内容を読み取り,/etc/syslog.conf
ファイルに指定されているように,それらの内容を
/var/adm/syslog/kern.log
ファイルに移動します。
次に
syslogd
デーモンが
msgbuf.err
ファイルを削除します。
システム・ロギングの実行方法についての詳細は,
syslogd
(8)
クラッシュ・ダンプのバイナリ・イベント・バッファの保存を試みます。
バイナリ・イベント・バッファには,特にクラッシュがハードウェア・エラーに起因する場合,クラッシュの原因となった問題を把握するのに役立つメッセージが入っています。
省略時の設定では,savecore
コマンドは,バイナリ・イベント・バッファを
/usr/adm/crash/binlogdumpfile
ファイルに保存します。
savecore
がバイナリ・イベント・バッファを書き込む位置は,/etc/binlog.conf
ファイルの
dumpfile
エントリを変更することにより変更できます。
/etc/binlog.conf
から
dumpfile
エントリを削除すると,savecore
はバイナリ・イベント・バッファを保存しなくなります。
その後,リブート処理で
binlogd
デーモンが起動し,/usr/adm/crash/binlogdumpfile
ファイルの内容を読み取り,/etc/binlog.conf
ファイルに指定されているように,それらの内容を
/usr/adm/binary.errlog
ファイルに移動します。
次に
binlogd
デーモンが
binlogdumpfile
ファイルを削除します。
バイナリ・エラー・ロギングの実行方法についての詳細は,
binlogd
(8)
すべてのカーネル・イベントが処理されてポストされる前に,システムがクラッシュする可能性があります。
そのような場合,savecore
プログラムでそのようなイベントを回復させ,後で処理するために格納します。
この回復は,そのようなイベントが利用可能で,savecore
プログラムがイベントを正常に抽出して保存することができる場合のみ発生します。
省略時の設定では,イベントは
/var/adm/crash/evm.buf
ファイルに格納されます。
詳細は,
savecore
(8)EVM
(5)
システムは,クラッシュ・ダンプをディスクに作成する際に,そのダンプをスワップ・パーティションに書き込みます。 システムがスワップ・パーティションを使用するのは,スワップ・パーティションに格納されている情報が,実行中のシステムにとってのみ意味を持つからです。 システムがクラッシュすると,この情報は無意味になるため,上書しても問題ありません。
システムはクラッシュ・ダンプを書き込む前に,/etc/sysconfigtab
ファイルで定義されているスワップ・パーティションにダンプがどのように収まるかを判断します。
たとえば,次の
/etc/sysconfigtab
ファイルのエントリでは,3 つのスワップ・パーティションが利用できることがわかります。
vm: swapdevice=/dev/disk/dsk0b, /dev/disk/dsk3h, /dev/disk/dsk13g vm-swap-eager=1
次に,システムがクラッシュ・ダンプを書き込む位置をどのように判断するかを示します。
クラッシュ・ダンプが 1 次スワップ・パーティションに収まる場合は,/etc/sysconfigtab
ファイルの
swapdevice
の下に列挙された最初のパーティションにダンプされます。
システムは,可能な限りパーティションの後方からダンプを書き込み,パーティションの先頭をブート時スワッピングに利用できるよう残しておきます。
クラッシュ・ダンプが,1 次スワップ・パーティションよりは大きいが,2 次スワップ領域または 3 次スワップ領域に収まる場合,システムはクラッシュ・ダンプをそのスワップ・パーティション (/dev/disk/dsk3h
および
/dev/disk/dsk13g
) に書き込みます。
クラッシュ・ダンプが,利用可能なスワップ・パーティションのどれよりも大きい場合,システムは,2 次および 3 次のスワップ・パーティションをまたいで,それらのスワップ・パーティションが満杯になるまで,クラッシュ・ダンプを書き込みます。 更にスペースが必要な場合は,残りのクラッシュ・ダンプ情報を 1 次スワップ・パーティションの最後から書き込みます (1 次スワップ・パーティションも満杯になる可能性があります)。
スワップ・パーティションをすべて集めても,容量が小さすぎてクラッシュ・ダンプが収まらない場合,システムはクラッシュ・ダンプを作成しません。
クラッシュ・ダンプにはそれぞれヘッダがあり,システムはそれを常に 1 次スワップ・パーティションの最後に書き込みます。
ヘッダには,ダンプのサイズや格納位置についての情報が入っています。
この情報によって,savecore
は,システムのリブート時にダンプを見つけて保存することができます。
ほとんどの場合,圧縮したダンプが 1 次スワップ・パーティションに収まります。
次の項では,dump_sp_threshold
について説明します。
この属性は,クラッシュ・ダンプの作成方法の理解に役立ちます。
その他のカーネル属性は,ダンプの内容を制御します。
これらの属性については,14.4 節で説明します。
スワップ・パーティションの使用の制御
システムの構成により,1 次スワップ・パーティションに情報 (ダンプ・ヘッダを除く) を書き込む前に,2 次スワップ・パーティションにダンプ情報を書き込むようにすることができます。
クラッシュ・ダンプを最初に書き込む位置を構成するために使用する属性は,dump_sp_threshold
属性です。
dump_sp_threshold
属性の値は,システムのリブート時のスワッピングのために通常用意しておく容量を示します。
省略時の設定では,この属性は 16,384 ブロックです。
つまり,システムはダンプの書き込み後に,1 次スワップ・パーティションに 8 MB のディスク容量が残るようにします。
図 14-3
には,40 MB のスワップ・パーティションに対する
dump_sp_threshold
の省略時設定を示します (40 MB という値は,ほとんどのシステムでは実際のスワップ・パーティションとして一般的な値ではありません。
分かりやすくするために,例では小さい数を使用しています)。
図 14-3: 省略時の dump_sp_threshold 属性の設定
システムは,図 14-3 に示す 1 次スワップ・パーティションに 32 MB のダンプ情報を書き込むことができます。 したがって,30 MB のダンプは 1 次スワップ・パーティションに収まり,そのパーティションに書き込まれます。 しかし,40 MB のダンプは大きすぎます。 システムはクラッシュ・ダンプ・ヘッダを 1 次スワップ・パーティションに書き込み,クラッシュ・ダンプの残りは 2 次スワップ・パーティションが利用できればそこに書き込みます。
dump_sp_threshold
の値を高く設定すると,システムは 1 次スワップ・パーティションにダンプ情報を書き込む前に,2 次スワップ・パーティションに書き込むようになります。
たとえば,dump_sp_threshold
属性の値を 1 次スワップ・パーティションのサイズと同じ値にすると,システムは 2 次スワップ・パーティションに先に書き込みます (dump_sp_threshold
属性の設定については,14.4.1 項で説明しています)。
図 14-4
には,複数デバイスの 2 次スワップ・パーティションにクラッシュ・ダンプがどのように書き込まれるかを示しています。
図 14-4: 複数のデバイスに書き込まれるクラッシュ・ダンプ
圧縮されていないクラッシュ・ダンプが図 14-4
のパーティション
e
を埋めた場合,システムは残りのクラッシュ・ダンプ情報を 1 次スワップ・パーティションの最後に書き込みます。
システムは,ダンプ全体を格納するために必要なだけ 1 次スワップ・パーティションを使用します。
システム・スワッピングから保護するため,ダンプは 1 次スワップ・パーティションの最後に書き込まれます。
ただし,ダンプが 1 次スワップ・パーティション全体を埋めると,システム・リブート時のスワッピングによって壊れることがあります。
dumpsys を使用したクラッシュ・ダンプ・サイズの見積り
クラッシュ・ダンプのサイズを見積るには,dumpsys
コマンドを使用して,実行時ダンプつまり続行可能なダンプを作成します。
dumpsys
コマンドの使用方法についての詳細は,14.5.1 項を参照してください。
一時的にファイル・システム領域を作成して,実験用のダンプを保持しなければならないこともあります。
この方法では,フル・ダンプと部分ダンプの両方が作成できます。
dumpsys
-u
コマンド・オプションを指定しない限り,クラッシュ・ダンプは圧縮されます。
dumpsys
コマンドの圧縮された出力から圧縮されていないダンプを作成するには,expand_dump
コマンドを使います。
スワップに書き込まれるクラッシュ・ダンプは,その結果保存されるクラッシュ・ダンプ・ファイルとほぼ同じサイズなので,クラッシュ・ダンプ・ファイルのサイズを調べれば,クラッシュ・ダンプの大きさは簡単に判断できます。 たとえば,システムが作成した最初のクラッシュ・ダンプ・ファイルの大きさを調べるには,次のコマンドを入力します。
# ls -s /var/adm/crash/vmzcore.0 20480 vmzcore.0
このコマンドは,クラッシュ・ダンプ・ファイルに占有されている 512 バイトのブロックの数を表示します。 この場合,ファイルは 20,480 個のブロックを占有しているので,スワップ・パーティションに書き込まれるクラッシュ・ダンプも約 20,480 ブロックだということがわかります。
場合によっては,システムに含まれるアクティブ・メモリが多いため,クラッシュ・ダンプを 1 つのディスクに格納できないことがあります。
たとえば,システムに 2 GB のメモリが実装されているのに 4 GB のディスクが数台しかなく,そのほとんどがデータの格納に占有されているとします。
このシステムのクラッシュ・ダンプは,大きすぎて 1 つのデバイスの 1 つのスワップ・パーティションには収まらないことがあります。
クラッシュ・ ダンプを複数のディスクに分散させるには,複数のディスクに 2 次 (そして,多分 3 次) スワップ・パーティションを作成します。
システムは,大きすぎて 1 次スワップ・パーティションの指定部分に収まらないダンプを,自動的に別の使用可能なスワップ・パーティションに書き込みます。
14.3.5 クラッシュ・ダンプ領域の計画
クラッシュ・ダンプはシステムのスワップ・パーティションに書き込まれるため,スワップ・パーティションのサイズを調整して一時または永続スワップ領域を作成して,クラッシュ・ダンプの領域を確保します。
スワップ・パーティションのサイズの変更についての詳細は,
swapon
(8)
注意
すべての永続スワップ・パーティションを,
/etc/sysconfigtab
ファイルにリストしてください。 クラッシュ・ダンプをスワップ・パーティションからファイルにコピーするsavecore
コマンドは,/etc/sysconfigtab
ファイルの情報を使用してスワップ・パーティションを見つけます。/etc/sysconfigtab
ファイルに指定されていないスワップ・パーティションがある場合,savecore
コマンドはそのパーティションを見つけられない可能性があります。
スペースの要件は,システムによって異なります。
インストール処理では次のアルゴリズムを使い,/var
ファイル・システムに必要なスペースを計算します。
3 * memsize / 24MB + 3 * 15MB
このとき,memsize
は M バイト単位の物理メモリの容量で,15 MB はカスタム・カーネルのおおよその大きさです。
このアルゴリズムでは,3 つのダンプを保存することが可能です。
以降の項では,システム上の部分クラッシュ・ダンプおよびフル・クラッシュ・ダンプに必要なスペースを見積る際のガイドラインを示します。
また,dump_sp_threshold
属性の設定についても説明します。
14.3.6 クラッシュ・ダンプ・ファイルに対するファイル・システム領域の割り当て
ご使用のシステムの標準的なクラッシュ・ダンプ・サイズを使用して,/var/adm/crash
ディレクトリに必要なファイル・システム領域の計画と割り当てを行うことができます。
たとえば,部分クラッシュ・ダンプを保存するとします。 また,システムには 96 MB のメモリがあり,クラッシュ・ダンプとスワッピングに 85 MB のディスク・スペースを予約しているとします。 この場合,クラッシュ・ダンプ・ファイルの格納には 20 MB の領域を予約してください。 複数のクラッシュ・ダンプをファイルに保存するには,さらに多くの領域が必要です。 複数のクラッシュ・ダンプをファイルに保存する場合は,古いクラッシュ・ダンプをアーカイブすることを検討してください。 クラッシュ・ダンプ・ファイルのアーカイブについての詳細は,14.6 節を参照してください。
特に指定しなければ,savecore
コマンドは
/var/adm/crash
ディレクトリにクラッシュ・ダンプを書き込みます。
省略時のディレクトリにクラッシュ・ダンプ・ファイルの領域を予約するには,ディスク・スペースが十分にあるファイル・システムを
/var/adm/crash
ディレクトリにマウントしなければなりません (ファイル・システムのマウントについての詳細は,第 6 章と
mount
(8)
ディスク・スペース不足でシステムがクラッシュ・ダンプ・ファイルを保存できない場合,システムはシングルユーザ・モードに戻ります。
シングルユーザ・モードに戻ることで,システム・スワッピングによるクラッシュ・ダンプ破壊が防止できます。
いったんシングルユーザ・モードになると,クラッシュ・ディレクトリに必要な領域を確保したり,クラッシュ・ディレクトリを変更したりすることができます。
この状況で考えられる方法の 1 つとして,シングルユーザ・モードのプロンプトでの
savecore
コマンドの実行があります。
コマンド行で,十分な領域を持つディレクトリの名前を指定して,クラッシュ・ダンプ・ファイルを保存します。
たとえば,次の
savecore
コマンドは,クラッシュ・ダンプ・ファイルを
/usr/adm/crash2
ディレクトリに書き込みます。
# savecore /usr/adm/crash2
savecore
コマンドがいったんクラッシュ・ダンプ・ファイルを保存すると,システムはマルチユーザ・モードで起動できるようになります。
または,ネットワークを起動して,ftp
コマンドを使用し,別のホストにリモート・ダンプが行えるようになります。
savecore
コマンド行でディレクトリを指定すると,クラッシュ・ディレクトリは,そのコマンド実行時に限り変更されます。
その後システムがクラッシュし,システムのスタートアップ・スクリプトが
savecore
スクリプトを起動すると,savecore
コマンドはクラッシュ・ダンプを省略時の
/var/adm/crash
ディレクトリにコピーします。
クラッシュ・ディレクトリの省略時の位置は,rcmgr
コマンドで SAVECORE_DIR 変数を設定して制御できます。
たとえば,省略時の動作で (システムのスタートアップ時に) クラッシュ・ダンプ・ファイルを
/usr/adm/crash2
ディレクトリに保存するには,次のコマンドを実行します。
# /usr/sbin/rcmgr set SAVECORE_DIR /usr/adm/crash2
クラッシュ・ダンプを保存したかどうかにかかわらず,システムをマルチユーザ・モードに戻したいときには,次のコマンドを実行します。
# /usr/sbin/rcmgr set SAVECORE_FLAGS M
省略時の設定では,クラッシュ・ダンプは圧縮された部分ダンプですが,必要に応じてフル・ダンプや圧縮されていないダンプ,またはフル・ダンプで圧縮されていないダンプも可能です。 通常,部分クラッシュ・ダンプは,クラッシュの原因を判断するために必要な情報を提供します。 しかし,クラッシュが繰り返し発生し,クラッシュの原因を究明するのに部分クラッシュ・ダンプでは役に立たない場合には,システムにフル・クラッシュ・ダンプを生成させることをお勧めします。
部分クラッシュ・ダンプには,次の情報が入っています。
クラッシュ・ダンプ・ヘッダ
物理メモリの一部のコピー
システムは,物理メモリの一部で,システム・クラッシュの時点で重要な情報を含むと思われる部分,すなわち基本的には,カーネル・ノードのコードおよびデータを書き込みます。 省略時の設定では,システムはユーザ・ページ・テーブルのエントリを省略します。
フル・クラッシュ・ダンプには,次の情報が入っています。
クラッシュ・ダンプ・ヘッダ
クラッシュの時点における物理メモリの全内容のコピー
クラッシュ・ダンプの取得方法は,次のように変更できます。
クラッシュ・ダンプのしきい値を調整する。
省略時の指定を変更し,ユーザ・ページ・テーブルのエントリが部分クラッシュ・ダンプに書き込まれるようにする。
部分クラッシュ・ダンプかフル・クラッシュ・ダンプかを選択する。
ダンプ圧縮の期待値を変更する。
圧縮されたクラッシュ・ダンプか非圧縮のクラッシュ・ダンプかを選択する。
これらのオプションについては,以降の項で説明します。
14.4.1 1 次スワップ・パーティションにおけるクラッシュ・ダンプのしきい値の調整
小さなクラッシュ・ダンプでも,1 次スワップ・パーティションに書き込む前に 2 次スワップ・パーティションに書き込むようにシステムを構成するには,dump_sp_threshold
属性に大きな値を設定します。
14.3 節で説明するように,この属性に割り当てる値は,通常,システム・クラッシュの後,システム・スワップのために利用できる領域の大きさを示します。
dump_sp_threshold
属性を調整するには,sysconfig
コマンドを実行します。
たとえば,1 次スワップ・パーティションが 40 MB だとします。
システムがクラッシュ・ダンプを 2 次スワップ・パーティションに書き込むように値を大きくするには,次のコマンドを実行します。
# sysconfig -r generic dump_sp_threshold=81920
この例では,generic
サブシステムの
dump_sp_threshold
属性に 81,920 ブロック (512 バイト・ブロック) (40 MB) が設定されます。
この例では,システムは 1 次スワップ・パーティション全体をシステム・スワップ用に残そうとします。
システムは,自動的に,クラッシュ・ダンプを 2 次スワップ・パーティションに書き込み,クラッシュ・ダンプ・ヘッダを 1 次スワップ・パーティションの最後に書き込みます。
sysconfig
コマンドは,現在実行中のカーネルのシステム属性値を変更します。
dump_sp_threshold
属性の新しい値を
sysconfigtab
データベースに格納するには,sysconfigdb
コマンドを使用して,データベースを変更します。
sysconfigtab
データベースと
sysconfigdb
コマンドについての詳細は,
sysconfigdb
(8)
注意
savecore
プログラムがクラッシュ・ダンプをファイルにコピーするとすぐに,すべてのスワップ・デバイスがマウントやスワップに使用できるようになります。 スワップ領域の共用は,ブート時の短時間だけ,通常は物理メモリの少ないシステムで発生します。
14.4.2 部分クラッシュ・ダンプにユーザ・ページ・テーブルを含める
省略時の設定では,部分クラッシュ・ダンプにはユーザ・ページ・テーブルは出力されません。 これらのテーブルは,通常はクラッシュ・ダンプの原因究明に役立たないため,省略してクラッシュ・ダンプおよびクラッシュ・ダンプ・ファイルのサイズを削減します。 ただし,テクニカル・サポート担当者から,クラッシュ・ダンプ解析用にユーザ・ページ・テーブルを含めるように依頼されることがあります。
部分クラッシュ・ダンプにユーザ・ページ・テーブルを含めるには,dump_user_pte_pages
属性の値に 1 を設定します。
dump_user_pte_pages
属性は,generic
サブシステムにあります。
次の例は,この属性を設定するために実行するコマンドを示します。
# sysconfig -r generic dump_user_pte_pages = 1
sysconfig
コマンドは,現在実行中のカーネルのシステム属性の値を変更します。
sysconfigtab
データベースに
dump_user_pte_pages
属性の新しい値を格納するには,sysconfigdb
コマンドを使用してデータベースを変更するか,カーネル・チューナ GUI (dxkerneltuner
) を使用します。
ユーザ・ページ・テーブルを部分クラッシュ・ダンプに書き込まないという省略時の設定に戻すには,dump_user_pte_pages
属性に 0 (ゼロ) を設定します。
14.4.3 部分クラッシュ・ダンプかフル・クラッシュ・ダンプかの選択
省略時,システムは部分クラッシュ・ダンプを生成します。
フル・クラッシュ・ダンプを生成するようにしたい場合は,次のようにカーネルの
partial_dump
変数に 0 (ゼロ) を設定すると,省略時の動作を変更できます。
# sysconfig -r generic partial_dump=0 partial_dump: reconfigured # sysconfig -q generic partial_dump generic: partial_dump = 0
カーネル・チューナ GUI または
sysconfigdb
コマンドを使用すると,カーネル・エントリを変更し,リブート後も変更を保持することができます。
部分クラッシュ・ダンプに戻すには,partial_dump
変数に 1 を再設定します。
部分ダンプが有効になっているときは,dump_kernel_text
属性も有効にしてカーネル・テキスト・ページを含めるようにすることができます。
14.4.4 ダンプ圧縮の期待値
expected_dump_compression
変数は,ダンプにどの程度の圧縮を期待するかを示すために使用します。
省略時は
expected_dump_compression
の値は 500 で,指定可能な最小値 0 (ゼロ) と最大値 1000 の中間に設定されています。
次の手順では,システムに適した
expected_dump_compression
変数を算出する方法を説明します。
14.5.1 項で説明するように,dumpsys
コマンドを使用して圧縮ダンプを作成します。
ls -s
コマンドを使用して,このダンプのサイズを書き留めます (値
a
とします)。
expand_dump
コマンドを使用して,圧縮されていないバージョンのダンプを作成します。
ls
-s
コマンドを使用して,このダンプのサイズを書き留めます (値
b
とします)。
a
を
b
で割り,圧縮率の近似値を算出します。
以上の手順を何度か繰り返して,圧縮率の最大値を選択します。 圧縮率に 1000 を掛けて,期待するダンプの値を算出します。
期待するダンプの値の 10 パーセントを足して
expected_dump_compression
変数の値にします。
次のように,sysconfig
コマンドを使用して,カーネルの
expected_dump_compression
変数に,必要な値を設定します。
# sysconfig -r generic expected_dump_compression=750 expected_dump_compression: reconfigured # sysconfig -q generic partial_dump generic: expected_dump_compression=750
カーネル・チューナ GUI または
sysconfigdb
コマンドを使用すると,カーネル・エントリを変更し,リブート後も変更を保持することができます。
14.4.5 圧縮されていないクラッシュ・ダンプの選択と使用
省略時の設定では,クラッシュ・ダンプはディスク・スペースを節約するために圧縮されます。
これにより,小さなパーティションに大きなクラッシュ・ダンプ・ファイルを書き込むことができます。
これは,特にリアルタイム操作でのスワップを抑制するようにシステムをチューニングするために,大容量の物理メモリを持たせたシステムで大きな利点となります。
クラッシュの後のリブート時に,savecore
コマンドは自動的に起動され,スワップ・パーティション内のクラッシュ・ダンプ・ヘッダの情報を使用して,ダンプが圧縮されていることを検出します。
次に,クラッシュ・ダンプ・ファイルがスワップ・パーティションから
/var/adm/crash
ディレクトリにコピーされます。
圧縮されたクラッシュ・ダンプ・ファイルでは,ファイル名中に文字
z
が付加され,圧縮されていないクラッシュ・ダンプ・ファイルと区別されます。
たとえば,vmzcore.1
のようになります。
このタイプの圧縮クラッシュ・ダンプ・ファイルは,dbx
などのデバッグ・ツールで扱うことができます (compress
や
gzip
などのツールで作成された圧縮ファイルでは使用できません)。
圧縮されたクラッシュ・ダンプ・ファイルをサポートしていないツールを使用する場合は,expand_dump
ユーティリティによって,従来の圧縮されていないフォーマットに変換できます。
次の例では,expand_dump
ユーティリティの使用方法を示します。
# expand_dump vmzcore.2 vmcore.2
圧縮されたフォーマットでは正しく動作しないツールやスクリプトを常に使用する場合や,expand_dump
コマンドが使用しづらい場合は,ダンプの圧縮を行わないようにできます。
ダンプの圧縮を行わないようにするには,次のように
sysconfig
コマンドを使用します。
# sysconfig -r generic compressed_dump=0
このコマンドは,ダンプのモードを非圧縮へ一時的に変更します。
次にリブートすると,モードは圧縮ダンプに戻ります。
変更を持続的にするには,sysconfigdb
コマンドを使用して
/etc/sysconfigtab
ファイル内の
compressed_dump
属性の値を変更するか,カーネル・チューナ GUI を使用して
generic
サブシステムの値を変更します。
注意
メモリ・ダンプは圧縮されます。
compressed_dump
システム属性を設定していない場合,メモリ・ダンプを書き込む前にシステムは自動的に圧縮を有効にします。
クラッシュ・ダンプの圧縮と非圧縮クラッシュ・ダンプ・ファイルの作成方法については,
savecore
(8)expand_dump
(8)sysconfig
(8)14.4.6 除外メモリへのダンプ
除外メモリは,特別な目的で確保されている,物理メモリの領域です。
メモリの除外領域は,/etc/sysconfigtab
ファイルに指定して作成することができます。
指定すると,システムのブート時に除外領域が作成されます。
たとえば次のように行います。
cma_dd: CMA_Option = Size-0x3000000, Alignment - 0, / Addrlimit - 0x4000000, Type - 0x96, Flag-0
この
/etc/sysconfigtab
ファイルのエントリは,48 MB の大きさの除外メモリの領域を予約します。
その
Type
は,値
0x96
により
M_EXEMPT
として指定されます。
Addrlimit
の値は,除外領域の開始位置を設定します。
この場合は
0x4000000
で,物理メモリの 64 MB の位置になります。
マシンをブートするたびに,この同じ物理メモリの領域が予約され,その他の目的では使用できなくなります。
メモリの除外領域を作成する方法には,擬似デバイス・ドライバ内で,タイプ
M_EXEMPT
を指定した
contig_malloc()
関数呼び出しを使うという別の方法もあります。
M_EXEMPT
タイプについての詳細は,malloc.h
ファイルを参照してください。
関数呼び出しの使用の詳細は,
contig_malloc
(9r)
vmstat
コマンドに
-M
オプションを付けて実行し,除外メモリ領域を調べることができます。
除外メモリにダンプするには,14.3.2 項で示すように
dump_to_memory
属性を有効にする必要があります。
必要に応じて,次の属性も構成します。
dump_exmem_size
ダンプを書き込む除外メモリ領域の大きさ (バイト単位) を指定します。
省略すると,値は
0
(ゼロ) となり,除外メモリ領域にダンプを書き込むことができなくなります。
dump_exmem_addr
1 次ダンプの書き込みに使用する除外メモリの領域の開始アドレス (仮想または物理) を指定します。
dump_exmem_include
ダンプに除外メモリ・ページを含めるかどうかを指定します。
省略すると,値は
0
(ゼロ) となり,除外メモリ・ページは除外されます。
dump_exmem_addr
属性を設定しても,dump_exmem_size
属性も構成しない限り,有効になりません。
属性の実行時設定を記録し,システム障害からの回復後にクラッシュ・ダンプを見つけることができるようにしてください。
次の例では,これらの属性の再構成方法を示しています。
# sysconfig -q generic dump_to_memory generic: dump_to_memory = 0 # sysconfig -r generic dump_to_memory=1 dump_to_memory: reconfigured # sysconfig -q generic dump_to_memory generic: dump_to_memory = 1
省略時の設定では,メモリ・ダンプは圧縮されます。
compressed_dump
システム属性にオンを設定していない場合は,その属性は自動的に有効になります。
savecore
コマンドは
vmzcore
文字型特殊デバイス・ファイルを使い,圧縮されたダンプを復元します。
詳細は,
savecore
(8)vmzcore
(7)14.4.7 リモート・ホストへのダンプ
savecore
コマンドに
-r
オプションを付けて使用し,ftp 接続を使用してクライアント・ホストからリモート・ホストへクラッシュ・ダンプ・ファイルを書き込みます。
リモートの宛先用に次の定義のどちらかを指定することができます。
リモート・ホストの名前と有効なアカウントとパスワード
ftp 接続とログイン情報の入っている構成ファイルへのパス
たとえば,次のコマンドは,ftp 接続をデバッグすることができる冗長モードで,リモート・ホストへのログインを指定します。
# savecore -v -r soserv:jeffdump:Cr$hDeBuG
ターゲット・ホストへ接続するとき,savecore
ユーティリティはリモート
ftpd
サーバ・デーモンに,クライアントのホスト名が前に付いた名前でディレクトリを作成するように指示します。
クラッシュ・ダンプ・ファイル (bounds
,msgbuf.savecore
,evm.buf
,vmunix.N
,および
vmcore.N
または
vmzcore.N
) がこのディレクトリに書き込まれます。
リモート・デバイス上に,クラッシュ・ダンプ用のスペースを十分確保しなければなりません。
この機能の詳細と,この機能を使用するときの制限については,
savecore
(8)ftpd
(8)14.5 手動によるクラッシュ・ダンプの生成
以降の項では,次の 2 つの状況でクラッシュ・ダンプを手動で作成する方法について説明します。
dumpsys
コマンドを使用して,システムを停止させずに,実行中のメモリのスナップショットをコピーします (システムは動作し続けます)。
コンソール・コマンド
crash
を使用して,応答しない (ハングした) システムのクラッシュ・ダンプ・ファイルを作成します。
クラッシュ・ダンプ・ファイル用の領域が適切に計画されており,カーネル・パラメータがこれまでの項で説明したように設定されているものとします。
14.5.1 実行中のシステムでの継続ダンプ
システムを停止させて通常のクラッシュ・ダンプを取得することができない場合は,dumpsys
コマンドを使用してメモリのスナップショットをダンプします。
システムは
dumpsys
コマンドがスナップショットを取得している間も動作するため,メモリ内容をコピーしている最中にそのメモリが変更されることもあります。
結果として生成されたダンプを分析すると,不完全にリンクされたリストや,部分的にゼロクリアされたページなどが存在することがあります。
これらは障害ではなく,メモリの一時的な状態を示しています。
このため,dumpsys
コマンドを使用してもシステムの問題を検出できず,14.5.2 項で説明するように,システムを停止させて強制的にクラッシュ・ダンプを生成しなければならないことがあります。
省略時の設定では,dumpsys
コマンドはクラッシュ・ダンプを
/var/adm/crash
ディレクトリに書き込みます。
/var/adm/crash/minfree
テキスト・ファイルは,dumpsys
コマンドがダンプをコピーした後,ファイル・システムに残す最小限の容量を KB 単位で指定します。
省略時の設定ではこのファイルは存在せず,最小値は設定されません。
最小値を指定するには,ファイルを作成し,予約する容量を KB 単位の数値で指定します。
minfree
ファイルでの設定は,-i
オプションを使用して置き換えることができます。
-s
オプションを指定すると,フル・ダンプおよび部分ダンプに必要なディスク・ブロックの概算値が表示されます。
正確な値は,次の理由で事前に把握することはできません。
省略時の設定では,実際のダンプは,連続するゼロの書き込みを抑制してディスク・スペースを最適化するため (非圧縮ダンプの場合のみ)。
システムによるカーネル動的メモリの使用状況 (malloc
/free
) は,システムの動作によって変化するため。
格納に必要な間接ディスク・ブロックの数が未知であるため。
次の例は,512 KB の物理メモリを持つシステムでのダンプを示します。 この例では,圧縮されないクラッシュ・ダンプを示しています。 特に指定しなければ,ダンプは圧縮されます。
# dumpsys -s Approximate full dump size = 1048544 disk blocks, if compressed, expect about 524272 disk blocks. Approximate partial dump size = 94592 disk blocks, if compressed, expect about 47296 disk blocks. # dumpsys -i /userfiles Saving 536797184 bytes of image in /userfiles/vmzcore.0 # ls /userfiles bounds vmzcore.0 vmunix.0
generic
カーネル・サブシステム内の 2 つの属性を使用すると,継続ダンプを制御できます。
live_dump_dir_name
ディレクトリへのパスを指定します。
このディレクトリには,継続ダンプ・ファイルが書き込まれます。
省略時の値は,/var/adm/crash
ディレクトリです。
live_dump_zero_suppress
継続ダンプのゼロ圧縮の有効/無効を指定します。 このオプションを有効にすると,ファイルの作成に時間がかかりますが,スペースは小さくなります。
詳細は,
dumpsys
(8)sys_attrs_generic
(5)14.5.2 ハングしたシステムでの強制クラッシュ・ダンプ
システムがハングしたときに,強制的にクラッシュ・ダンプを行うようにすることができます。 ほとんどのハードウェア・プラットフォームでは,次の手順でクラッシュ・ダンプを強制的に行います。
システムに停止 (Halt) ボタンの使用可能/使用不能を設定するスイッチがある場合,そのスイッチを使用可能の位置に設定します。
停止ボタンを押します。
コンソール・プロンプトで,crash
コマンドを入力します。
システムによっては,停止ボタンのないものもあります。 その場合は,次の手順を実行して,ハングしたシステム上でクラッシュ・ダンプを強制的に行います。
コンソール・プロンプトで Ctrl/p を入力します。
コンソール・プロンプトで,crash
コマンドを入力します。
システムがハングしたときにクラッシュ・ダンプを強制的に行うと,クラッシュ・ダンプに記録されるパニック文字列は次のようになります。
hardware restart
停止ボタンを押すか Ctrl/p を入力することによってシステムの動作に割り込みをかけると,このパニック文字列が必ず記録されます。
14.6 クラッシュ・ダンプ・ファイルの保存とアーカイブ
圧縮された (vmzcore.n
) クラッシュ・ダンプ・ファイルのみで作業している場合は,効率良く保存するためにすでに十分圧縮されています。
以降の項では,特殊な場合について説明します。
14.6.1 項では,保存や転送のために次の状況でファイルを圧縮する方法について説明します。
圧縮されていない (vmcore.n
) クラッシュ・ダンプ・ファイルで作業している場合
可能な限り最大の圧縮が必要な場合 - たとえば,低速の伝送回線でクラッシュ・ダンプ・ファイルを伝送する必要がある場合
14.6.2 項では,vmcore.n
ファイルを圧縮して作成された,部分クラッシュ・ダンプ・ファイルの圧縮を解除する方法について説明します。
14.6.1 クラッシュ・ダンプ・ファイルの圧縮
vmcore.n
クラッシュ・ダンプ・ファイルを圧縮するには,gzip
,compress
,または
dxarchiver
などのユーティリティを使用します。
たとえば,次のコマンドでは,vmcore.3.gz
という名前の圧縮ファイルが作成されます。
# gzip vmcore.3
クラッシュ・ダンプ・ファイル
vmzcore.n
は特別な圧縮方式を使用しているため,圧縮解除しなくても,デバッガやクラッシュ分析ツールで読み取ることができます。
vmzcore.n
ファイルは,同じ内容の
vmcore.n
ファイルと比べると相当圧縮されていますが,vmcore.n
ファイルを
gzip
のような標準の UNIX 圧縮ユーティリティを使用して圧縮した場合ほどには圧縮されません。
vmzcore.n
ファイルに対して標準の圧縮を適用すると,ファイルの大きさは同じ内容の
vmzcore.n
ファイルよりも 40% 程度小さくなります。
vmzcore.n
ファイルに,可能な限り最大の圧縮を適用する必要がある場合は,次の手順を実行します。
expand_dump
コマンドを使用して,vmzcore.n
ファイルを圧縮解除します
(
expand_dump
(8)vmzcore.3
ファイルから
vmcore.3
という名前の圧縮されていないファイルが作成されます。
# expand_dump vmzcore.3
作成された
vmcore.n
ファイルを,標準の UNIX ユーティリティを使用して圧縮します。
次の例では,gzip
コマンドを使用して,vmcore.3.gz
という名前の圧縮ファイルが作成されます。
# gzip vmcore.3
vmzcore.n
ファイルは
expand_dump
コマンドでのみ圧縮解除できます (gunzip
,uncompress
,その他のユーティリティは使用できません)。
expand_dump
コマンドを使用して
vmzcore.n
ファイルを
vmcore.n
ファイルに圧縮解除すると,vmzcore.n
ファイルに圧縮し直すことはできません。
14.6.2 部分クラッシュ・ダンプ・ファイルの圧縮解除
この項は,vmcore.n
ファイルから圧縮された部分クラッシュ・ダンプ・ファイルの圧縮解除の場合にのみ適用されます。
vmcore.n
ファイルから圧縮した部分クラッシュ・ダンプ・ファイルを圧縮解除する際は注意が必要です。
オプションを指定しないで
gunzip
または
uncompress
コマンドを使用すると,メモリ・サイズと同じ格納スペースを必要とする
vmcore.n
ファイルが作成されます。
つまり,圧縮解除されたファイルには,フル・クラッシュ・ダンプから得られる
vmcore.n
ファイルと同じ大きさのディスク・スペースが必要になります。
このような状況になるのは,元の
vmcore.n
ファイルに UNIX File System (UFS) ファイルのホールがあるためです
(UFS ファイルには,データ・ブロックに関連づけられていない,ホールと呼ばれる領域が含まれていることがあります)。
gunzip
または
uncompress
コマンドのようなプロセスがファイルのホールから読み取りを行うと,ファイル・システムは,値 0 のデータを返します。
このため,部分ダンプから省略されていたメモリが,0 だけを含むディスク・ブロックとして,圧縮されていない
vmcore.n
ファイルに追加されます。
圧縮されていないコア・ファイルを部分ダンプのサイズのままにするには,-c
オプションを指定した
gunzip
または
uncompress
コマンドから,conv=sparse
オプションを指定した
dd
コマンドに出力をパイプしなければなりません。
たとえば,vmcore.0.Z
という名前のファイルを圧縮解除するには,次のコマンドを実行します。
# uncompress -c vmcore.0.Z | dd of=vmcore.0 conv=sparse 262144+0 records in 262144+0 records out