メインコンテンツへスキップ
  1. Posts/

TrueNAS SCALEのImmichでDNSクエリ暴走とCPU負荷を解決する(N54L延命戦記)

·1900 文字·4 分·
hidetti
著者
hidetti
スノボとホームラボのセルフホストノート

我が家の宅内要塞(hidetti.net)のコア、HP ProLiant MicroServer N54L上で稼働するTrueNAS SCALE環境において、深夜4時から謎のCPU負荷上昇とAdGuard HomeへのDNSクエリ爆撃が発生した。

結論から言うと、原因はImmichのMachine Learningコンテナが要求するCPU命令セット(AVX)の不整合による即死と、それに伴う名前解決の無限ループであった。非力なTurion II Neo CPU(2コア/16GB RAM枠)を労りつつ、システムに再び「深呼吸」をさせるための美しい撤退戦をここに残す。


1. 発生した現象:AdGuardのログを埋め尽くす大量のクエリ
#

今朝、システムモニターを確認すると、通常1〜2%で推移しているはずのN54LのCPU使用率(Load Average)のベースラインが一段跳ね上がっていた。 同時に、上流のDNSキャッシュサーバーであるAdGuard Homeのクエリログを確認したところ、以下のローカルドメインへの異常な超高速リトライクエリ(秒間数十回)が記録されていた。

  • machine-learning
  • machine-learning.local

過去7日間の「最も問い合せされたドメイン」のトップに急浮上するほどの大出血状態であった。


2. 原因:AVX命令セット非互換によるコンテナ即死
#

TrueNAS SCALEの「Apps」画面からImmichのWorkloads(ワークロード)を確認したところ、インフラの歪みが露わになった。

server - 動作中
pgvecto - 動作中
machine-learning - Exited  <-- これが原因!
redis - 動作中
permissions - Exited

根本原因のメカニズム
#

  1. Turion II Neoの限界 (AVX未実装): Immichが近年採用している機械学習ライブラリ(ONNX Runtime / PyTorch等)は、CPUの拡張命令セットである AVX / AVX2 を要求する。しかし、名機N54Lにはこれが物理的に実装されていない。そのため、コンテナ内のプロセスがログ(stdout)を吐き出す前の超初期段階で Illegal instruction により即死(Exited)していた。
  2. リトライループの発生: メインの server コンテナは、死んでいる machine-learning コンテナに対して「おい、応答してくれ!」と名前解決を試み続ける。これがコンテナ内部のネットワークを突き抜け、外部のAdGuard Homeまで漏れ出て無限リトライループ(DNS暴走)を構成していた。

3. 対策:Machine Learningの完全無効化
#

メモリ16GB制限(ZFS ARCで8GBをガッチリ死守中)のN54L環境において、顔認識やオブジェクト検出のためにCPUを空振りで100%に張り付かせるのは、インフラ防衛上大きなリスクだ。 万が一、瞬低や停電が発生した際、オムロン BW55T(blazer_usb/ippon)のシャットダウンシーケンス(360秒タイマー)の確真な遂行を脅かしかねない。

NASとしての「写真バックアップ」「アルバム閲覧」という本質機能を最優先し、ML機能を安全に切り離す英断を下した。

TrueNAS SCALEでの最適化手順
#

  1. TrueNASの AppsImmich編集(Edit) を開く。
  2. Enable Machine Learning のチェックボックスを外す(オフにする)。
  3. 画面下部までスクロールし、保存(Save) をクリック。

【結果】 ワークロードから machine-learning の表記自体が消え去り、「インスタンス 5」のクリーンな布陣へ移行。AdGuard HomeへのDNSクエリはピタッと止まり、Tera Termから確認した htop のCPU負荷は平熱(1〜2%の静寂)へと戻った。


4. AdGuard Home側でのダメ押し防御設定
#

万が一、今後のアップデート等でImmich serverが寝言のようにクエリを飛ばした場合に備え、AdGuard Home側で1ミリ秒でシャットアウトするカスタムフィルターを設定した。

フィルター > カスタムフィルタールール:

||machine-learning^$dnsrewrite=NXDOMAIN;;
||machine-learning.local^$dnsrewrite=NXDOMAIN;;

これにより、無駄な外部問い合わせを発生させず、即座に「ドメイン不在(NXDOMAIN)」を返してN54LのCPUサイクルを徹底的に保護する。


5. 今後の展望:顔認識を取り戻すロードマップ
#

もし将来的にどうしても顔認識(ソート機能)を完全復活させたい場合、N54L単体に無理をさせず、以下のスマートなアプローチをとる予定だ。

  1. External Machine Learningの活用: Immichの設計を活かし、重いAI処理だけを別マシンのパワー(GPU搭載のデスクトップPC等)に丸投げする運用。
  2. Hugging Face超軽量モデルの検証: Hugging Face Endpoint 設定を利用し、AVX命令を要求しない cpu-only の超軽量量子化モデル(MobileNetベース等)を週末にじっくり実験する。

限られた16GBのメモリとTurion CPUという制約の中で、システムをパニックに陥らせず安定稼働させる。これこそがセルフホストの醍醐味であり、シニアエンジニアの流儀である。

💬 フィードバック・感想はこちら

この記事へのご意見・ご感想は、X(旧Twitter)でつぶやいていただくか、匿名のフィードバックフォームからお寄せください。