Boot Linux chậm? Dùng systemd-analyze để ‘truy vết’ và tối ưu ngay

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Vấn đề: Tại sao server của bạn khởi động chậm?

Bạn đã bao giờ gõ lệnh reboot rồi đi pha xong tách cafe mà server vẫn chưa lên? Với một người mới, cảm giác chờ đợi này thường đi kèm sự lo lắng không biết hệ thống đang “nghẽn” ở đâu. Trên con VPS Ubuntu 22.04 mình quản lý, thời gian boot ban đầu mất gần 120 giây. Chỉ sau vài bước soi xét bằng systemd-analyze, mình đã kéo con số này xuống còn 25 giây.

Hệ điều hành Linux hiện nay dùng systemd để khởi động các tiến trình song song. Cách này rất nhanh nhưng cũng dễ gây ra xung đột giữa các dịch vụ phụ thuộc (dependencies), tạo thành những điểm nút cổ chai khó chịu. Bài viết này sẽ giúp bạn bóc tách từng lớp quá trình khởi động để tìm ra chính xác thứ gì đang làm lãng phí thời gian của bạn.

Hiểu về trợ thủ systemd-analyze

systemd-analyze là công cụ có sẵn cực kỳ hữu ích. Nó thu thập dữ liệu từ lúc kernel bắt đầu chạy cho đến khi toàn bộ dịch vụ tầng người dùng (userspace) sẵn sàng.

Đừng đoán mò dựa trên cảm tính. Công cụ này cung cấp số liệu chuẩn xác đến từng mili giây qua 4 lệnh cốt lõi:

  • time: Tổng kết nhanh thời gian khởi động.
  • blame: Xếp hạng dịch vụ từ “chậm nhất” đến “nhanh nhất”.
  • critical-chain: Vạch trần chuỗi dịch vụ đang trực tiếp kéo lùi tốc độ boot.
  • plot: Xuất biểu đồ SVG để bạn nhìn toàn cảnh quá trình một cách trực quan.

Thực hành: Tìm và diệt bottleneck

Bước 1: Kiểm tra tổng thời gian khởi động

Đầu tiên, hãy lấy một con số tổng quát để làm mốc so sánh (benchmark). Bạn chỉ cần mở terminal và chạy:

systemd-analyze

Kết quả trả về thường có dạng:

Startup finished in 3.452s (kernel) + 12.120s (userspace) = 15.572s 
graphical.target reached after 12.110s in userspace

Hãy tập trung vào phần userspace. Trong khi thời gian kernel phụ thuộc nhiều vào phần cứng thì userspace là nơi bạn hoàn toàn có thể tối ưu bằng phần mềm.

Bước 2: Chỉ mặt đặt tên những dịch vụ “ngốn” thời gian

Muốn biết ai đang chiếm dụng tài nguyên lâu nhất, hãy dùng lệnh blame:

systemd-analyze blame

Thực tế trên server của mình, network-manager-wait-online.service từng ngốn tới 10 giây vô ích. Một dịch vụ khác là plymouth-quit-wait.service cũng thường xuyên nằm trong top đầu.

Lưu ý: Đừng vội xóa ngay các dịch vụ đứng đầu. Đôi khi dịch vụ A chậm vì nó đang phải đợi dịch vụ B phản hồi. Đây là lúc chúng ta cần phân tích sâu hơn.

Bước 3: Phân tích chuỗi dịch vụ then chốt (Critical Chain)

Lệnh critical-chain giúp bạn nhìn thấy mối quan hệ nhân quả giữa các tiến trình:

systemd-analyze critical-chain

Kết quả hiển thị dạng cây. Các dịch vụ sau ký tự @ là mốc thời gian bắt đầu chạy. Nếu một mắt xích trong chuỗi này bị chậm, nó sẽ tạo hiệu ứng domino khiến toàn bộ quá trình boot bị kéo dài theo.

Bước 4: Trực quan hóa bằng biểu đồ

Nếu bảng biểu trên terminal quá khó nhìn, hãy xuất chúng ra file ảnh SVG để xem trên trình duyệt:

systemd-analyze plot > boot_analysis.svg

Mở file này bằng Chrome hoặc Firefox, bạn sẽ thấy những thanh ngang dài ngắn khác nhau. Thanh nào càng dài, chỗ đó càng cần được bạn “chăm sóc” kỹ.

Bước 5: Các chiến thuật tối ưu thực tế

Dựa trên kinh nghiệm cá nhân, mình thường áp dụng 3 bài thuốc sau:

  1. Mạnh tay tắt dịch vụ thừa: Server không cần Bluetooth hay Modem? Hãy tắt ModemManager.service hoặc bluetooth.service ngay lập tức.
    sudo systemctl disable bluetooth.service
  2. Xử lý “hố đen” Network Manager: network-manager-wait-online thường đợi mạng kết nối xong mới cho boot tiếp. Nếu server dùng IP tĩnh và bạn không quá khắt khe về việc phải có mạng ngay giây đầu tiên, hãy dùng lệnh mask:
    sudo systemctl mask network-manager-wait-online.service
  3. Dọn dẹp LVM/RAID: Nhiều distro mặc định quét ổ đĩa LVM lúc boot. Nếu bạn chỉ dùng phân vùng ext4 thông thường, tắt các dịch vụ này sẽ giúp bạn tiết kiệm được khoảng 2-3 giây quý giá.

Kết quả ngọt ngào

Sau khi tinh chỉnh, mình chạy lại lệnh kiểm tra và nhận được kết quả bất ngờ:

Startup finished in 3.102s (kernel) + 4.220s (userspace) = 7.322s

Thời gian userspace giảm từ 12 giây xuống còn hơn 4 giây, tức là nhanh gấp 3 lần. Server phản hồi nhanh nhạy hơn hẳn mỗi khi mình cần bảo trì hoặc khởi động lại từ xa.

Tối ưu boot không chỉ để lấy tốc độ, mà còn là cách tuyệt vời để bạn hiểu sâu hơn về hệ điều hành đang vận hành. Đừng ngại thử nghiệm với systemd. Tuy nhiên, hãy nhớ kiểm tra kỹ chức năng của dịch vụ trước khi disable để tránh tình trạng mất kết nối server đáng tiếc nhé!

Share: