Linuxの起動が遅いと感じたら? systemd-analyzeでボトルネックサービスを3分で見つけて最適化する

概要

LinuxサーバーやPCの起動時間がいつもより長くかかる場合、原因を特定して不要な遅延を減らす必要があります。systemd-analyze コマンドを活用すれば、全体の起動時間の計測からボトルネックとなっているシステムサービスの追跡、ユニットファイルの検証まで簡単に行うことができます。本記事では、実務ですぐに活用できる主要な分析コマンドとパフォーマンス最適化手法について解説します。

1. 起動所要時間の確認とセクション別遅延の測定 (time & blame)

systemd-analyze コマンドは、起動プロセスでかかった合計時間とカーネルおよびユーザー空間(userspace)の初期化時間を測定して表示します。
実行結果を見ると、システムが起動してGUI環境である graphical.target に到達するまでに合計315msかかったことが確認できます。
⚙️ [主要オプション]

time : 起動時にカーネルおよびユーザー空間で消費された合計時間を出力します(デフォルトの動作)。
blame : 初期化プロセスにおいて起動遅延を引き起こしたサービス一覧を、所要時間の降順で出力します。
critical-chain : 起動遅延の原因となるクリティカルパス(時間クリティカルチェーン)のサービス依存関係ツリーを表示します。
plot : 起動プロセス全体のサービス別実行タイムラインをSVGグラフィックファイル形式で出力します。
dot : サービス間の依存関係をGraphviz dot形式で生成します。

systemd-analyze

systemd-analyze blame | head -n 10 コマンドは、起動時に実行されたサービスのうち、初期化所要時間が最も長い上位10個のサービスを降順にソートして確認します。
実行結果からは、systemd-resolved.service (68ms) と ldconfig.service (67ms) が起動初期化プロセスで最も多くの時間を消費したことが分かります。

systemd-analyze blame | head -n 10

2. 起動遅延のクリティカルパスを追跡する (critical-chain)

systemd-analyze critical-chain コマンドは、システムの起動完了に直接的な影響を与えたサービス群の依存関係ツリー(クリティカルパス)を出力します。
出力結果の @ 記号の後はユニットがアクティブ化または開始された時刻を示し、+ 記号の後はそのユニット自体の実行に費やされた時間を意味します。
結果のツリーを見ると、graphical.target (315ms) に到達するまでに systemd-resolved.service (68ms) や systemd-journald.service (39ms) などが直列に連結されており、全体の起動遅延を招いた主要なボトルネックパスであることが確認できます。

systemd-analyze critical-chain

systemd-analyze critical-chain networking.service コマンドは、特定のサービス(ここでは networking.service)を指定し、そのサービスが開始されるまでのクリティカルチェーンのみを選択的に追跡します。
システム全体のパスの代わりに、特定のネットワークやバックエンドサービスのボトルネックとなる依存関係だけを切り離して分析したい場合に便利です。

systemd-analyze critical-chain networking.service

3. 起動タイムライン可視化SVGレポートの生成 (plot)

起動分析レポートファイルを体系的に保存・管理するために、mkdir -p ~/systemd-reports コマンドを実行して専用ディレクトリを作成します。

mkdir -p ~/systemd-reports

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg コマンドは、起動プロセス全体で実行された各サービスの開始タイミングと実行所要時間を、視覚的なタイムライン形式のSVGグラフィックファイルとして生成・保存します。
テキストログだけでは把握しにくいサービス間の並列実行の流れや遅延区間を、グラフィックチャートで直感的に確認できます。

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg

ls -lh ~/systemd-reports/boot-analysis.svg コマンドは、生成されたSVGレポートファイルの存在有無やファイルサイズ(59KB)などの詳細情報を確認します。
生成されたSVGファイルは、Webブラウザや画像ビューアで開くことで、詳細な起動タイムラインチャートを視覚的に分析できます。

ls -lh ~/systemd-reports/boot-analysis.svg

4. サービスユニットの設定エラーおよびセキュリティ状態の検証 (verify & security)

sudo systemd-analyze verify /lib/systemd/system/ssh.service コマンドは、指定したユニットファイルの構文エラーや設定の不備を事前に検証します。
実行結果に何もメッセージが表示されない場合は、対象のサービスユニットファイルに文法上の欠陥や設定エラーがないことを意味します。

sudo systemd-analyze verify /lib/systemd/system/ssh.service

systemd-analyze security ssh.service コマンドは、指定したサービスユニットのセキュリティ分離設定とシステム露出レベル(Security Exposure)を診断します。
実行結果から、root権限での実行有無(User=)、デバイスアクセス制御(PrivateDevices=)、権限昇格の防止(NoNewPrivileges=)など、主要なセキュリティ項目の適用状態とリスク露出スコアを詳細に確認できます。

systemd-analyze security ssh.service

ここまで、systemd-analyze コマンドを活用して起動遅延の原因となるボトルネックサービスを特定し、最適化する方法について見てきました。
不要なサービスを整理して、より快適で高速なLinuxの起動環境を整えてみてください。