Linuxの起動が遅い原因の調査方法

Linuxの起動がものすごく遅い.10分ぐらい掛かる.そういう質問を受けたので原因調査の手順と解決法をまとめます.

起動時のログを見る方法

systemdにはシステム起動時のログを分析する機能があります.使い方も簡単

まずは systemd-analyze を実行します

$ systemd-analyze 
Startup finished in 3.328s (kernel) + 9min 57.615s (userspace) = 10min 944ms
graphical.target reached after 1min 36.168s in userspace

起動には10分944ミリ秒かかっていて,そのうち userspace の処理で 9分57秒も掛かっていることが解ります.たしかに遅い.

より詳細なログを見ます.systemd-analyze に blame オプションを付けます.

$ systemd-analyze  blame

以下のような表示がでました.

  9min 56.696s cron-weekly.service
     5min 2.388s cron-daily.service
         20.106s ssh.service
          5.000s networking.service
          1.018s ifupdown-wait-online.service
           632ms vmware-USBArbitrator.service
           548ms ifupdown-pre.service
           487ms udisks2.service
           438ms NetworkManager-wait-online.service
           426ms apt-daily.service
           403ms vmware.service
           366ms logrotate.service
           354ms ModemManager.service
           351ms apt-daily-upgrade.service
           242ms swap.swap.swap
           241ms systemd-logind.service
           209ms dev-sda2.device
           157ms avahi-daemon.service
          以下省略

問題があるのは先頭の2行

  9min 56.696s cron-weekly.service
     5min 2.388s cron-daily.service

この部分です. cron weekly と daily が猛烈に遅いようです.

cron-weekly の中身を調べます

$ ls /etc/cron.weekly/
man-db  systemd-cron

2つスクリプトがあります.man-db と systemd-cron です.

man-db は man page のデータベースを再構築する処理です.どうもこの処理に時間がかかっているようです

原因

このLinuxは,ストレージにSSDを使っていますが,SSDの空き容量がほぼゼロになっていました.
その結果ディスクの書き込みに時間が掛かる状態になっていて,man-db のデータベース再構築に9分ちかくかかっていました.

対処

不要なファイルを削除して SSD の空き容量を増やしました.これだけで解決しました.

まとめ

  • 起動時のログは systemd-analyze で確認できる
  • 詳細なログは systemd-analyze blame で確認できる
  • SSD は空き容量が不足するとディスクへの書き込みアクセスが劇的に遅くなる (2019年11月25日表現をあらためました)ディクスアクセスが劇的に遅くなる

SSDの空き容量は常に確認しておくべきですね.