우분투 실전 명령어 | systemd-analyze 부팅 지연 병목 찾기

언제 쓰는가

서버가 재부팅된 뒤 서비스가 늦게 올라오거나, 부팅 시간이 갑자기 길어졌을 때 원인을 빠르게 찾을 때 쓴다.
특히 배포 직후 체감이 느려졌는데 어디서 지연이 생겼는지 감이 안 잡힐 때 가장 효과적이다.

바로 쓰는 명령어

# 전체 부팅 시간 요약
systemd-analyze

# 커널/유저스페이스 시간 분리 확인
systemd-analyze time

# 오래 걸린 서비스 상위 확인
systemd-analyze blame | head -20
# 서비스 의존성 임계 경로 확인
systemd-analyze critical-chain

# 특정 서비스 기준으로 체인 확인
systemd-analyze critical-chain nginx.service

핵심 옵션/패턴

  • systemd-analyze blame은 어떤 유닛이 오래 걸렸는지 길이순으로 보여준다. 느린 항목을 바로 추릴 때 가장 먼저 본다.
  • critical-chain은 실제로 부팅 완료 시점에 영향을 준 경로를 보여준다. 단순히 느린 서비스와 진짜 병목을 구분할 수 있다.
  • time은 kernel, initrd, userspace를 나눠 보여준다. 커널 쪽 문제인지 서비스 쪽 문제인지 1차 분류에 좋다.
  • 반복 점검할 때는 재부팅 후 2~3회 측정해 평균으로 판단하는 게 안전하다.

명령 출력 예시

$ systemd-analyze
Startup finished in 5.112s (kernel) + 9.384s (userspace) = 14.497s
graphical.target reached after 9.361s in userspace.
$ systemd-analyze blame | head -5
3.842s snapd.service
2.771s NetworkManager-wait-online.service
1.902s apt-daily.service
1.411s docker.service
1.123s postgresql.service
$ systemd-analyze critical-chain
graphical.target @9.361s
└─multi-user.target @9.360s
  └─docker.service @7.948s +1.411s
    └─network-online.target @7.921s
      └─NetworkManager-wait-online.service @5.149s +2.771s

자주 하는 실수

  • blame 상단만 보고 바로 비활성화한다. 실제 임계 경로에 없는 유닛일 수도 있어서 체감 개선이 없을 수 있다.
  • NetworkManager-wait-online.service를 무조건 끈다. 원격 마운트나 의존 서비스가 있으면 장애를 만든다.
  • 한 번 측정한 숫자만 믿고 결론을 낸다. 캐시 상태나 네트워크 지연에 따라 편차가 크게 난다.
  • 운영 서버에서 근거 없이 타이머 서비스까지 같이 끈다. 보안 업데이트 누락 같은 2차 문제가 생긴다.

검증 방법

# 재부팅 전후 기록 저장
systemd-analyze time
systemd-analyze blame | head -20
systemd-analyze critical-chain > /tmp/critical-chain-before.txt
# 설정 변경 후 재부팅 뒤 다시 비교
systemd-analyze time
systemd-analyze critical-chain > /tmp/critical-chain-after.txt
diff -u /tmp/critical-chain-before.txt /tmp/critical-chain-after.txt
# 서비스 안정성까지 함께 확인
systemctl --failed
journalctl -b -p warning --no-pager | tail -50

운영 팁

변경은 한 번에 하나씩만 적용하고 매번 재부팅 후 수치를 기록해 두면 원인 추적이 쉬워진다.
부팅 최적화는 속도보다 안정성이 우선이라, 서비스 의존성 문서를 먼저 확인하고 조정하는 편이 안전하다.

출처

  • Ubuntu Server Guide
  • systemd man pages
  • freedesktop.org systemd documentation