FJcloud実践
メモリダンプの手動取得方法~Linux編~
本記事では、Linuxの仮想サーバーにて、手動でメモリダンプを取得する方法を、検証結果をもとに解説します。
メモリダンプとは、コンピューターのメモリの内容を記録したファイルのことです。プログラムの異常終了やシステムのクラッシュの原因を調べるのに役立ちます。
本記事では、メモリダンプを取得する手順を、以下の3つのステップに分けて解説します。
- メモリダンプ取得準備
- メモリダンプ取得
- メモリダンプ取得確認
この手順に従うことで、Linuxの仮想サーバーにて、手動でメモリダンプを取得することができます。
メモリダンプを取得する際は、本記事を活用してください。
なお、Windows Serverのメモリダンプの手動取得方法は、ブログ「メモリダンプの手動取得方法~Windows Server編~」を参考にしてください。
前提条件
本記事は、以下の前提知識がある方を想定しています。
- FJcloud-Vの基本的なコントロールパネルの操作、サービスを利用する知識
- Linuxの基本的な操作、知識
検証概要
Linuxの仮想サーバー上にて、メモリダンプを取得します。 コマンドによる意図的なカーネルクラッシュを実行することで、メモリダンプを取得します。 サーバーの操作には、コンソール接続を使用します。
利用リソース
リソース | 数量 | タイプ | 用途等 |
---|---|---|---|
仮想サーバー | 1 | c2-small2 | OSイメージ:Red Hat Enterprise Linux 9.4を選択 |
検証前の準備
検証前の準備として、以下の作業を実施しておきます。
- Linuxの仮想サーバーを作成
- rootユーザーのパスワードを設定
- kdump設定を有効化(今回の仮想サーバーでは、kdumpがインストール済で、デフォルトで有効化状態)
kdumpのインストール、kdumpサイズ見積もり、設定方法等は、以下のRed Hat Documentation(Red Hat Enterprise Linux 9)を参照してください。
- kdumpのインストール確認コマンドと出力結果
# rpm -q kexec-tools kexec-tools-2.0.27-8.el9.x86_64
- kdumpサービスのステータス確認コマンドと出力結果
# kdumpctl status kdump:Kdump is operational
- カーネルへのcrashkernel=コマンドラインパラメーター追加の確認コマンドと出力結果
# grubby --info ALL index=0 kernel="/boot/vmlinuz-5.14.0-427.16.1.el9_4.x86_64" args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=UUID=(...略...) (...以下略...)
- kdump有効化の確認コマンドと出力結果
# systemctl status kdump.service ○ kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; preset: enabled) Active: active (exited) since (...略...) (...以下略...)
例)今回の仮想サーバーの場合
※メモリダンプ取得中は、仮想サーバーは利用できません。
あらかじめ作業時間を調整の上、メモリダンプを取得することを推奨します。
環境により取得時間は変化するため注意してください。 - kdumpのインストール確認コマンドと出力結果
メモリダンプ取得
以下のステップで、メモリダンプを取得します。
- メモリダンプ取得準備
- メモリダンプ取得
- メモリダンプ取得確認
メモリダンプ取得準備
サーバーにログインし、System Request Keyを有効化します。
- サーバーのコンソール接続を起動し、ログインユーザー名として「root」と入力してログインします。
- System Request Keyを有効化します。
# sysctl -w kernel.sysrq=1
- 変更後のSystem Request Keyの設定値を確認します。
# sysctl -a | grep sysrq kernel.sysrq = 1 (設定値が反映されています)
メモリダンプ取得
System Request Keyを使用し、メモリダンプを取得します。
- System Request Keyを使用して、カーネルクラッシュを実行します。
# echo c > /proc/sysrq-trigger
メモリダンプが取得されます。処理が完了するまで、待ちます。
処理が完了すると、サーバーが自動的に再起動します。
メモリダンプ取得確認
取得したメモリダンプのファイルが存在しているか確認します。
- サーバーのコンソール接続にて、ログインユーザー名として「root」と入力してログインします。
クラウドユーザーガイド(コンピューティング:コンソール接続する:Linux系OSの場合) - ログイン後、/var/crashディレクトリ内に、メモリダンプのファイルを格納するディレクトリが作成されます。作成されたディレクトリ名を確認します。
# ls -l /var/crash
- 作成されたディレクトリ内に、メモリダンプのファイルが存在することを確認します。
# ls -l /var/crash/作成されたディレクトリ名
※vmcore、vmcore-dmesg.txt、kexec-dmesg.logのファイルが作成されています。各ファイルの説明は、Red Hat Documentation(Red Hat Enterprise Linux 9)の 14.8. システムクラッシュ後に kdump によって生成されるファイルを参照してください。
- メモリダンプファイルの出力先は、/etc/kdump.conf ファイルの「path」を確認してください。デフォルト設定は、「/var/crash」です。
まとめ
Linuxのメモリダンプの取得方法について、検証した結果をまとめました。メモリダンプの取得は、一般的に以下の方法で取得することができます。
- NMIをサーバーに送付する
- コマンドによる意図的なカーネルクラッシュを実行する
FJcloud-Vでは、NMIを仮想サーバーに送付する機能は提供していないため、コマンドによる意図的なカーネルクラッシュを実行した検証を行いました。本記事が、メモリダンプを手動取得する際に、参考になれば幸いです。
注意事項
- 本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。
- 本記事ではOS上の操作についても記載していますが、FJcloud-VではOS以上はご利用者様の責任範囲となりますのでご留意ください。
- kdumpの設定については、お客様の契約するOSベンダーのサポート担当の指示のもと実行してください。
- コマンドによる意図的なカーネルクラッシュを実行した結果、想定外の不具合が生じるなどの問題が発生した場合でも弊社での責任は負いかねますのでご了承ください。
- 本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
- 本記事は、2024年9月時点の情報です。ご利用の際は、各サービス/FJcloud-Vの機能、OSベンダーの最新情報をご確認ください。