Siburlog

SiblogだとSI BlogっぽいのでSiburlogとする

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以下の場合はセカンドカーネル用のメモリ確保をしてくれないようだ。

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-kdump-configuration-cli.html

 

メモリが少ない環境ではcrashkernel=64Mとしておこう。

とりあえずCentOS6.4@1GB RAMの環境では、crashkernel=64Mでkdumpは正常に動作したようだ。

 

kdumpの設定は/etc/kdump.confに書く。

変更したらservice kdump restartを実行。

systemd環境ならsystemctl restart kdump・・・かな?(未確認)

 

sshリモートホストへダンプする方法。

まず、/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については常に有効らしい(無効には出来ないらしい)。