如何分析 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
這會顯示一條以箭頭連接的服務鏈,每一行代表一個服務,括號內的數字表示該服務在啟動過程中等待的時間。這能幫助你區分「服務本身啟動慢」與「等待其他服務啟動」的差異。
例如,若某服務的等待時間遠大於其執行時間,這意味著瓶頸在於上游依賴,而非該服務本身。此時,解決問題的方向應該是優化上游服務,而非該服務。
常見問題與解決方案
在分析啟動時間時,使用者常會遇到以下兩個問題:
-
為什麼
systemd-analyze blame顯示的時間與實際感受不符?systemd-analyze blame顯示的是服務從被觸發到主程序(main process)結束的時間,但某些服務(如 NetworkManager)可能在主程序結束後仍進行背景工作。此外,並行啟動的服務在圖表中可能看起來很短,但實際上它們共同佔用了系統資源。建議結合systemd-analyze plot來判斷並行度,並使用journalctl -b -u <service_name> -n 50查看該服務的詳細日誌,以獲取更準確的資訊。 -
如何加速不必要的服務啟動? 若發現某些服務(如
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 深入關鍵路徑,你就能精準定位瓶頸。記住,啟動優化不僅是減少秒數,更是提升系統響應效率與穩定性的重要一環。定期檢查啟動時間,能幫助你維持系統的最佳狀態。