如何分析 Linux 系統的啟動時間 文章首圖

如何分析 Linux 系統的啟動時間

如何分析 Linux 系統的啟動時間

在日常維護或效能調校中,我們常會遇到「系統開機變慢」的困擾。對於系統管理員而言,單純抱怨「慢」是沒有幫助的,我們需要精確的數據來定位瓶頸。Linux 提供了多種工具來剖析啟動過程,從底層的系統日誌到專門的啟動計時器,本文將帶領你逐步掌握分析技巧,幫助你找出拖慢開機速度的元兇。

使用 systemd-analyze 進行初步診斷

現代 Linux 發行版(如 Ubuntu 22.04 和 Debian 12)大多採用 systemd 作為初始化系統。systemd 內建了強大的診斷工具 systemd-analyze,它能迅速提供啟動過程的概覽。

首先,讓我們查看系統啟動的總時間以及每個服務佔用的時間。在終端機中執行以下指令:

systemd-analyze

輸出結果通常包含兩行關鍵資訊:Startup finished in ... 顯示從內核載入到用戶空間初始化的總時間,而 Critical chain 則顯示影響啟動速度的關鍵路徑。

若你想更直觀地比較各個服務啟動的順序與耗時,可以使用 blame 參數。這會列出所有啟動的服務,並按耗時長度排序:

systemd-analyze blame

在這個列表中,請特別留意時間較長的服务。例如,如果你看到 networkd-wait-online.service 耗時數秒,這通常是網路介面等待連線造成的常見瓶頸。透過這個列表,你可以快速鎖定需要進一步調查的服務。

視覺化啟動流程

對於複雜的啟動過程,文字列表有時難以呈現全貌。systemd-analyze 提供了圖形化的輸出方式,讓你能一目了然地看到服務之間的依賴關係與重疊情況。

執行以下指令將啟動圖表儲存為 SVG 檔案:

systemd-analyze plot > boot.svg

接著,使用任何支援 SVG 的瀏覽器(如 Firefox 或 Chrome)打開 boot.svg 檔案。你會看到一張橫向的時鐘圖,每一條線代表一個服務,線的長度代表啟動時間,線的起始位置代表它何時被觸發。

在圖表中,你可以清楚地看到哪些服務是「並行啟動」的(垂直對齊),哪些服務是「串列等待」的(水平延伸)。這對於理解為什麼某些服務無法加速特別有幫助,因為它們必須等待前置服務完成。

深入分析關鍵路徑

當我們透過 blame 或圖表發現某個特定服務異常耗時時,需要進一步分析該服務及其依賴關係。使用 critical-chain 參數可以顯示從開機到進入多使用者模式(multi-user.target)的關鍵路徑:

systemd-analyze critical-chain

這會顯示一條以箭頭連接的服務鏈,每一行代表一個服務,括號內的數字表示該服務在啟動過程中等待的時間。這能幫助你區分「服務本身啟動慢」與「等待其他服務啟動」的差異。

例如,若某服務的等待時間遠大於其執行時間,這意味著瓶頸在於上游依賴,而非該服務本身。此時,解決問題的方向應該是優化上游服務,而非該服務。

常見問題與解決方案

在分析啟動時間時,使用者常會遇到以下兩個問題:

  1. 為什麼 systemd-analyze blame 顯示的時間與實際感受不符? systemd-analyze blame 顯示的是服務從被觸發到主程序(main process)結束的時間,但某些服務(如 NetworkManager)可能在主程序結束後仍進行背景工作。此外,並行啟動的服務在圖表中可能看起來很短,但實際上它們共同佔用了系統資源。建議結合 systemd-analyze plot 來判斷並行度,並使用 journalctl -b -u <service_name> -n 50 查看該服務的詳細日誌,以獲取更準確的資訊。

  2. 如何加速不必要的服務啟動? 若發現某些服務(如 cups.service 印表機服務或 bluetooth.service)在個人桌面環境中無需使用,可以直接停用它們:

    sudo systemctl disable --now cups.service
    sudo systemctl disable --now bluetooth.service

    停用服務不僅能減少啟動時間,還能降低記憶體佔用。但請務必確認該服務確實不需要,避免影響硬體功能。

小結

分析 Linux 啟動時間並非難事,關鍵在於善用 systemd-analyze 提供的工具組合。透過 systemd-analyze 取得總覽、blame 識別慢速服務、plot 視覺化依賴關係,以及 critical-chain 深入關鍵路徑,你就能精準定位瓶頸。記住,啟動優化不僅是減少秒數,更是提升系統響應效率與穩定性的重要一環。定期檢查啟動時間,能幫助你維持系統的最佳狀態。