ubuntu serverをとてもメモリが少ない状態で運用しています(RaspberryPi zero2w:512MB)使用メモリがキツいのでデフォルトの状態からサービスをいくつか削りたいのです。

Raspberry Pi Zero 2 W(メモリ512MB)でUbuntu Serverを運用する場合、標準のシステム要件(1GB以上推奨)を下回るため、不要なサービスの停止は非常に効果的です。 

以下のサービスを停止・無効化することでメモリ使用量を削減できます。

1. 優先的に停止すべきサービス

  • snapd: パッケージ管理システムですが、常駐メモリを多く消費します。使用していない場合は削除を推奨します。
    • コマンド: sudo apt purge snapd
  • cloud-init: 初回起動時の設定用ツールで、起動後もメモリを消費し続けることがあります。
    • コマンド: sudo touch /etc/cloud/cloud-init.disabled (無効化)
  • ModemManager: モデム接続用ですが、Wi-Fi/有線のみであれば不要です。
    • コマンド: sudo systemctl disable --now ModemManager
  • unattended-upgrades: 自動更新サービス。手動更新にするなら停止可能です。
    • コマンド: sudo systemctl disable --now unattended-upgrades
  • avahi-daemon: ネットワーク上の機器発見用。ホスト名でのアクセスが不要なら停止できます。
    • コマンド: sudo systemctl disable --now avahi-daemon 

2. メモリ節約のための設定

  • GPUメモリの削減: 映像出力を使わない場合、GPUへの割り当てを最小限にします。
    • /boot/firmware/config.txt(または /boot/config.txt)に gpu_mem=16 を追記。
  • Swapファイルの作成: メモリ不足によるフリーズを防ぐため、1GB程度のスワップ領域を確保してください。
  • システムの状態確認: 以下のコマンドで、現在メモリを消費しているサービスを特定できます。
    • systemctl list-units --type=service --state=running
    • systemd-analyze blame(起動に時間がかかっているサービスの確認) 

SSH以外の不要なサービスを一つずつ sudo systemctl disable --now [サービス名] で止めていくのが安全です。

さらに軽量化を進めるために、現在どのような用途でこのサーバーを使用されていますか?用途に合わせて削れるものを追加で提案できます。 

fbiを使った画像表示を専門に行うサイネージシステムに使います。

FBI (linux Framebuffer Imageviewer) を使用したサイネージ用途であれば、ネットワーク、物理コンソール、バックグラウンド更新に関連するサービスをさらに削ることが可能です。

1. FBI専用機として削れる追加サービス

FBIはフレームバッファに直接描画するため、通常の対話型ログインや多機能なネットワーク管理は最小限にできます。

  • getty (Ttyの制限): 複数の仮想コンソールが起動していますが、サイネージなら1つ(FBI実行用)以外は不要です。
    • コマンド: sudo systemctl disable getty@tty2.service(tty3以降も同様に停止可能)
  • wpa_supplicant / NetworkManager: 画像をローカルから再生するだけであれば、Wi-Fi自体を無効化できます。
    • コマンド: sudo systemctl disable wpa_supplicant
  • Multipathd: サーバー向けストレージ管理用で、ラズパイのSDカード運用には不要です。
    • コマンド: sudo systemctl disable --now multipathd
  • packagekit: ソフトウェア情報の更新用。手動で行うなら不要です。
    • コマンド: sudo systemctl disable --now packagekit

2. サイネージを安定させるためのFBI最適化 

メモリが少ない環境では、FBIの実行オプションも重要です。

  • 自動終了の回避とループ設定: FBIがメモリ不足で落ちないよう、キャッシュを溜め込まない設定にします。bashfbi -d /dev/fb0 -T 1 -a -noverbose -t 10 --cachemem 0 /path/to/images/*
    • --cachemem 0: メモリキャッシュを無効にし、その都度ファイルを読み込みます(512MB環境では必須級)。
    • -a: 画面サイズに自動追従させます。 

3. ZRAMの導入(強く推奨)

物理メモリが限界に近い場合、スワップをSDカードに書くのではなく、ZRAM(メモリ内の圧縮領域)を使用すると、パフォーマンスの低下を抑えつつ実質的なメモリ容量を増やせます。

  • zram-tools などを導入し、メモリの1/2程度をZRAMに割り当てると、512MBでも動作が安定します。

4. GPUメモリの最小化

サイネージですが、FBIはフレームバッファ(CPU描画)を利用するため、GPU専用メモリは最小で問題ありません。

  • /boot/firmware/config.txt に gpu_mem=16(または32)を記述して再起動してください。

現在は画像の更新(ネットワーク経由か、USB等か)はどのように行っていますか?更新方法によっては、さらにネットワーク関連のサービスを整理できます。

ネットワークドライブをマウントしています。

ネットワークドライブ(SMB/CIFSやNFS)をマウントして画像を読み込む運用であれば、

ファイル共有プロトコルに関連するメモリ消費と、マウント維持のためのオーバーヘッドを最小化するのが鍵です。

512MBの制限下で、以下の追加アクションを推奨します。

1. ネットワークマウントの効率化

マウント方法を工夫することで、常時接続によるリソース消費を抑えます。 

  • AutoFS(自動マウント)の利用: 常時接続(fstab)ではなく、アクセスがあった時だけマウントし、一定時間使わなければアンマウントするようにします。これにより、接続維持のためのメモリやネットワーク待機のリソースを節約できます。
  • マウントオプションの最適化:
    • SMB (CIFS) の場合、cache=none オプションを検討してください。メモリ上でのキャッシュを無効にし、FBIが画像を読み込む際に直接サーバーから取得するようにします。
    • vers=3.0 など、最新かつ軽量なプロトコルバージョンを明示的に指定して、古い互換モードの動作を避けます。 

2. 不要な「ファイル探索・待機」サービスの停止

ネットワーク経由でファイルを扱う際、Ubuntu Serverが裏で動かしている「お節介」なサービスを止めます。

  • gvfs: デスクトップ環境用の仮想ファイルシステムですが、サーバー版でも依存関係で動いている場合があります。サイネージには不要です。
    • コマンド: sudo apt purge gvfs*
  • cups (印刷サービス): ネットワーク上のプリンターを探し続けるため、メモリを消費します。
    • コマンド: sudo systemctl disable --now cups 

3. FBI実行時のメモリ管理(再掲・重要)

マウント先がネットワークドライブの場合、FBIが「全画像を一度にスキャン」しようとするとメモリが枯渇します。

  • キャッシュの無効化: 前述の --cachemem 0 オプションを必ず使用してください。
  • リストからの読み込み: 大量の画像がある場合、fbi /mnt/network_drive/* とするとファイルリストの展開だけでメモリを食います。テキストファイルに画像パスを書き出し、-l オプションで読み込む方が軽量です。 

4. その他、サイネージ専用機で削れるサービス

  • man-db: 毎日深夜にマニュアルのインデックスを更新し、CPUとメモリを占有します。
    • コマンド: sudo systemctl disable --now man-db.timer
  • polkit: 権限管理用ですが、GUIを使わない単一用途のサイネージなら停止を検討できます(システムの安定性と相談)。 

ZRAMの設定は済んでいますか?512MB環境では、物理メモリの半分程度をZRAMに割り当てるだけで、ネットワーク越しの画像展開時に発生する瞬間的なメモリ不足(OOM Killerによる強制終了)を劇的に防げます。

画像の枚数1枚あたりの解像度はどの程度でしょうか?それにより、さらに踏み込んだメモリ制限設定が必要か判断できます。