MECHATRAXのブログ

弊社製品やサービスに関するブログです。企画や開発の際の参考になれば幸いです。
slee-Pi3のWatchdog timerでラズパイのプロセス監視【OOMから復帰】

slee-Pi3のWatchdog timerでラズパイのプロセス監視【OOMから復帰】

2021.04.06@kiyonaga

今回は slee-Pi 3 のウォッチドッグタイマでプロセス監視を行います。
本製品のメリット 自動ハードウェアリセット ができる機能を活用します。
ハード異常でも slee-Pi 3 ならクリーンな状態で復帰できます。
ソフトウェアウォッチドッグタイマではどうしようもない時に有用です。

[関連ブログ]

slee-Pi 3 のウォッチドッグタイマを利用したプロセス監視シリーズ
【OOM 状態からの即時復帰】← 本ブログ
正常動作検知による監視
異常動作検知による監視
異常動作検知-実装編

[目的と方法]

目的:異常事態からの即時復帰
方法:slee-Pi 3 のウォッチドッグタイマがハートビート信号を監視する仕組みを利用
意図的に OOM(Out Of Memory) を起こしてプロセス監視機能によるハードウェア再起動を再現する

[環境]

・ラズベリーパイ 3B
・Raspberry Pi OS Lite Legacy (Buster)
・slee-Pi 3

[事前準備]slee-Pi 3 セットアップ

slee-Pi 3 のセットアップ時に sleepi3-utils を必ずインストールしてください。
セットアップ詳細は こちら

[手順1]service ファイルの中身確認

プロセスが kill されやすいようにデフォルトでは Nice=19 , OOMScoreAdjust=1000 に設定されています。
OOM 時にハートビートを優先的に kill させ、プロセス監視機能(ウォッチドッグタイマ)で再起動させるためです。

/lib/systemd/system/sleepi3-restart.service
[Unit]
Description=sleepi3 software heartbeat
DefaultDependencies=no
After=sysinit.target

[Service]
Type=simple
Nice=19
OOMScoreAdjust=1000
Environment=LED_PATH=/sys/class/leds/sleepi:led0
ExecStart=/usr/lib/sleepi3-utils/heartbeat.py

[Install]
WantedBy=sysinit.target

service ファイルの詳細は下記コマンドでご確認ください。

man systemd.service

[手順2] OOMKiller 用プログラム作成と実行

今回はこちらの ブログ を参考にしました。

[手順3]復帰確認

OOM 状態になると slee-Pi 3 のハートビート(LED1 の点滅)が途絶える様子を確認できます。
途絶えてから60秒後に再起動を始め、正常に起動すれば異常状態からの復帰は成功です。
※slee-Pi 3 セットアップ時のハートビート監視時間は60秒です。詳細は こちら の HEARTBEAT_TIMEOUT を確認ください。

下記コマンドを実行すると再起動要因がわかります。
実際にウォッチドッグタイマのタイムアウトによる再起動が起動要因として表示されました。sleepi3ctl コマンド詳細は こちら

sleepi3ctl get wakeup-flag
watchdog

[まとめ]

今回は slee-Pi 3 のプロセス監視機能による即時復帰を行いました。
ウォッチドッグタイマのおかげで自動ハードウェアリセットができ、異常が起きてもクリーンな状態で復帰ができます。

< ブログ一覧へ戻る

関連記事はこちら