0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

ラズパイのプロセス監視を slee-Pi3 のウォッチドッグタイマで【OOM 状態からの即時復帰編】

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

[関連ブログ]

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

[目的と方法]

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

[環境]

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

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

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

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

sleepi3ctl get wakeup-flag
watchdog

[まとめ]

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?