crashについてメモ
gcoreが失敗する理由その1。
makedumpfileの-dオプションでユーザデータを省いてやしないか。
softlockup detectorについてメモ
以下の二つで設定。
# sysctl -w kernel.softlockup_panic=[0|1] # 0 is default, 1 enables panic at softlockup
# sysctl -w kernel.softlockup_thresh=<threshold in sec>
しかし、CentOS6.4のカーネルだと、sysctlの項目として、softlockup_panicはあるけど、softlockup_threshが無い気がする。
softlockup detector自体はちゃんと動作して、恐らく閾値は60秒固定になってる。
カーネルモードで、長時間処理を行うと誤検出されてしまうという問題がある。
回避のためには、__touch_watchdog()を適当に呼べば良いらしい。
LKDTMについてメモ
色んな発生条件で、色んな種類の障害を、インジェクション出来るモジュール。
使用方法から考えて、モジュールとしてビルドするのがいいだろうな。
例。
# modprobe lkdtm cpoint_name=FS_DEVRW cpoint_type=EXCEPTION cpoint_count=20
FS_DEVRWはファイルシステムからブロックデバイスへのI/O処理を表す。
この例だと、I/O処理が20回起こると障害が発生する。
EXCEPTIONはNULLへの書き込みとのこと。
cpoint_name=DIRECTを使えば、lkdtmをロードした段階ですぐに障害が発生する。
他にも発生条件は色々選べる。
障害の種類が色々選べるのも便利だと思う。
例えば、cpoint_type=HARDLOCKUPなんかは、NMIウォッチドッグを試すのに使えると思われ。
modprobe時の引数で設定する方法の他に、/sys/kernel/debug/provoke-crashを使う方法もあるようだが、cpoint_{name,type}は指定できるものの、cpoint_countを指定するインターフェースが無い・・・?
Kdumpについてメモ
crashkernel=autoは、環境によるかもしれないが、とりあえずRHEL6では、物理RAMが4GB以下の場合はセカンドカーネル用のメモリ確保をしてくれないようだ。
メモリが少ない環境ではcrashkernel=64Mとしておこう。
とりあえずCentOS6.4@1GB RAMの環境では、crashkernel=64Mでkdumpは正常に動作したようだ。
kdumpの設定は/etc/kdump.confに書く。
変更したらservice kdump restartを実行。
systemd環境ならsystemctl restart kdump・・・かな?(未確認)
まず、/etc/kdump.confに以下のように記載。
ssh user@hostname
path /path/to/dump
core_collector makedumpfile -c --message-level 1 -d 31
/path/to/dumpはリモートホスト上でuserが書き込み権限を持つディレクトリでなくてはならない。
あとは以下を実行する。
一行目は公開鍵をリモートホストの当該ユーザの.sshへ仕込む。
二行目はkdump.confの変更の反映。
# service kdump propagate
# service kdump restart
リモートホストではvmcoreではなくvmcore.flatというファイルが作られる。
サイズはvmcoreと同じくらいだが、別物。以下のようにして変換する必要あり。
% makedumpfile -R vmcore < vmcore.flat
SysRqについてメモ
SysRqキーというのが、キーボードの上方、特殊キーが色々並んでるところに配置されている。
Linuxではこれを押した時に色々な機能が実行されるようになっている。
キーボードから入力できることの利点は、キーボード割り込みの延長で機能が実行出来ることらしい。つまりカーネルがハングしてる状況で便利。
正確に言うと、SysRqキーだけを押してもダメで、Alt+SysRq+コマンドキーの組み合わせを押す必要がある。
コマンドキーというのは実行したい各機能に対応したキーだ。
例えばAlt+SysRq+sで、全ファイルシステムでsyncが実行されるらしい。
(ハング時にsyncなど実行したら状況が悪化する気もするが・・)
コマンドキーと対応する機能の一覧はカーネルのバージョンに応じて異なるようだ。
このSysRqキーをエミュレートするのが、ご存知/proc/sysrq-triggerだ。
以下でAlt+SysRq+sと同様の処理が実行される。
# ehco s > /proc/sysrq-trigger
sysctlのkernel.sysrq、あるいは/proc/sys/kernel/sysrqで、SysRqキーによる各機能の有効・無効を切り替えられる。
なお、/proc/sysrq-triggerについては常に有効らしい(無効には出来ないらしい)。