ダンプとは?クラッシュした瞬間のメモリを丸ごと保存する記録

システム開発・テクノロジー
ダンプとは?ざっくりと3行で
  • システムがクラッシュやフリーズした瞬間のメモリの内容をそのままファイルに書き出したもののこと。英語の「dump(ぶちまける)」が語源で、DBのデータを書き出す操作もダンプと呼ぶ
  • エンジニアはこのファイルを専用ツールで解析することで、クラッシュ直前に何のプログラムが何をしていたかを把握し、再現しにくいバグの原因を突き止められる
  • Windowsのブルースクリーン(BSOD)発生時には自動的にダンプファイルが生成される。LinuxやUnixではコアダンプ(core dump)と呼ばれる

【深掘り】これだけ知ってればOK!

ダンプが最も力を発揮するのが「滅多に再現しない障害」のデバッグだ。通常のデバッグはプログラムの動作を追いかけて問題を再現させるが、月に1回しか起きないクラッシュや本番環境だけで起きる障害はデバッガを接続して待つことが難しい。ダンプは「クラッシュした瞬間の状態をスナップショットとして残す」ことで、再現ができない問題でも後から原因分析できる唯一の手段になる。

ダンプには主に2種類がある。フルダンプ(完全メモリダンプ)はシステムの全メモリ内容を丸ごとファイルに記録するもので、詳細な解析が可能だが搭載メモリと同サイズのファイルになる。ミニダンプは問題に関連する最低限の情報だけを記録したもので、ファイルサイズは数百KB〜数MB程度と小さく扱いやすい。初動の調査ではミニダンプから始めて、必要に応じてフルダンプを取得するアプローチが実務的だ。

データベース領域でも「ダンプ」という言葉は頻繁に使われる。mysqldump(MySQL)やpg_dump(PostgreSQL)はデータベースの全内容をSQLファイルとして書き出すコマンドで、バックアップや移行に使われる。「DBのダンプを取ってから作業してください」という指示は「まずバックアップを作成してから」という意味で、障害対応や大規模な構成変更前に欠かせない手順だ。

Windowsのブルースクリーン(BSOD)後に生成されるダンプファイルはC:¥Windows¥MEMORY.DMP(フルダンプ)またはC:¥Windows¥Minidump¥フォルダ(ミニダンプ)に保存される。解析にはMicrosoftが提供するWinDbgというデバッグツールを使い、「!analyze -v」コマンドを実行するとクラッシュの原因となったドライバーやプロセスが特定できる。

Linuxではコアダンプ(core dump)がダンプに相当し、プロセスが異常終了した際にそのプロセスのメモリ内容が「core」というファイルに書き出される。本番サーバーではセキュリティ上の理由からコアダンプを無効化していることが多いが、障害調査に必要なときだけ有効化して取得するという運用が一般的だ。

よくある誤解

ダンプファイルは必ずエンジニアにしか解読できないという思い込み

WinDbgのような解析ツールとシンボル情報があれば、比較的短時間でクラッシュの原因となったドライバーやプロセス名を特定できる。ツールの使い方を一度覚えれば実務で役立つ場面は多い。

「DBのダンプを取る」とシステムがクラッシュすると思っている

データベース領域での「ダンプ」はシステムクラッシュとは無関係で、DBの内容をファイルに書き出すバックアップ操作を意味する。「mysqldumpでダンプを取ってから作業します」は「安全のためにバックアップを先に取ります」という意味だ。文脈によってダンプの意味が変わる点は覚えておきたい。

会話での使われ方

ITKAGYO運営者デプロイ太郎のアイコン画像

本番でまたクラッシュしました。ダンプファイルを取得して共有してください。WinDbgで解析してみます。

障害対応中のリードエンジニアが運用チームへSlackで指示している場面。再現困難なクラッシュの原因特定にダンプ解析を使おうとしている。

ITKAGYO運営者デプロイ太郎のアイコン画像

本番DBのデータ移行前に必ずmysqldumpでダンプ取っておいてください。万が一のときにロールバックできるようにしておくのは絶対条件です。

インフラエンジニアがデータベース移行作業の前に後輩へ作業手順の注意点を伝えている場面。DBの文脈でのダンプがバックアップを意味している。

ITKAGYO運営者デプロイ太郎のアイコン画像

ダンプ解析してみたら、古いドライバーが原因のブルースクリーンでした。ドライバーを最新版に更新したら症状が再現しなくなりました。

IT担当者が社内の定期報告でダンプ解析によって原因特定から解決まで至った経緯を共有している場面。

【まとめ】3つのポイント

  • 再現しない障害を後から解析できる唯一の手段:ダンプはクラッシュ時のメモリのスナップショットで、デバッガを使えばどのプロセスが何をしていてなぜ落ちたかを事後に特定できる
  • DBの「ダンプ」はバックアップ操作のこと:mysqldumpやpg_dumpを使ったDB書き出しもダンプと呼び、大規模な作業前の必須手順として現場で日常的に使われる言葉だ
  • Windowsではブルースクリーン後にCドライブへ自動保存される:WinDbgで「!analyze -v」を実行すれば原因のドライバーやプロセスが特定でき、一度手順を覚えると実務で役立つ場面が多い

よくある質問

Q
ブルースクリーンのダンプファイルはどこにありますか?
A

Windowsのフルメモリダンプはデフォルトで「C:\Windows\MEMORY.DMP」に保存されます。ミニダンプは「C:\Windows\Minidump\」フォルダに日付付きの.dmpファイルとして保存されます。ファイルが存在しない場合は、システムのプロパティ→詳細設定→起動と回復でダンプ設定を確認してください。

Q
MySQLのダンプとバックアップは何が違いますか?
A

mysqldumpで取得するダンプはSQL文(CREATE TABLE・INSERT文など)のテキストファイルで、DBの論理的な内容を記録します。バックアップにはこのダンプ方式のほか、データファイルをそのままコピーする物理バックアップもあります。ダンプはDB版が変わっても移行しやすいという利点がありますが、データ量が多いと取得・復元に時間がかかるというデメリットもあります。

Q
ダンプファイルは個人情報を含む可能性がありますか?
A

含む可能性があります。メモリダンプにはクラッシュ時に処理していたデータがそのまま含まれるため、ユーザーの個人情報・認証情報・機密データが記録されている場合があります。サポートへのファイル提出や社外共有の際は含まれる情報のリスクを事前に評価し、不要になったら安全に削除してください。

Q
ダンプとコアダンプの違いは何ですか?
A

ダンプはメモリやデータの内容をファイルに書き出す操作や結果を広く指す言葉です。コアダンプはUnix/Linuxシステムでプロセスが異常終了した際に「core」という名前のファイルに書き出されたものを指す特定の用語です。意味は重なりますが、コアダンプはLinux環境のプロセス異常終了に特化した呼び方です。

【出典】参考URL

https://e-words.jp/w/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%80%E3%83%B3%E3%83%97.html :IT用語辞典 e-Words「メモリダンプ」
https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/performance/generate-a-kernel-or-complete-crash-dump :Microsoft公式「カーネルダンプの生成方法」
https://blog.engineer-memo.com/2012/06/24/%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%80%E3%83%B3%E3%83%97%E8%A7%A3%E6%9E%90%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9/ :WinDbgを使ったクラッシュダンプ解析の手順

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました