리눅스 부팅 속도가 느릴 때? systemd-analyze로 병목 서비스 3분 만에 찾아 최적화하기

개요

리눅스 서버나 PC의 부팅 시간이 평소보다 오래 걸린다면 원인을 파악해 불필요한 지연을 줄여야 합니다. systemd-analyze 명령어를 활용하면 전체 부팅 시간 측정부터 병목을 유발하는 시스템 서비스 추적, 유닛 파일 검증까지 손쉽게 수행할 수 있습니다. 본 글에서는 실무에서 즉시 활용할 수 있는 핵심 분석 명령어와 성능 최적화 기법을 다룹니다.

1. 부팅 소요 시간 확인 및 구간별 지연 측정 (time & blame)

systemd-analyze 명령어는 부팅 과정에서 소요된 전체 시간과 커널 및 사용자 공간(userspace)의 초기화 시간을 측정하여 보여줍니다.
실행 결과를 보면 시스템이 부팅되어 GUI 환경인 graphical.target에 도달하기까지 총 315ms가 걸렸음을 확인할 수 있습니다.
⚙️ [주요 옵션]

time : 부팅 시 커널 및 사용자 공간에서 소비된 전체 시간을 출력합니다(기본 동작).
blame : 초기화 과정에서 부팅 지연을 유발한 서비스 목록을 소요 시간 내림차순으로 출력합니다.
critical-chain : 부팅 지연을 유발하는 결정적 경로(시간 임계 체인)의 서비스 종속성 트리를 표시합니다.
plot : 부팅 과정 전체의 서비스별 실행 타임라인을 SVG 그래픽 파일 형태로 출력합니다.
dot : 서비스 간의 종속성 관계를 Graphviz dot 형식으로 생성합니다.

systemd-analyze

systemd-analyze blame | head -n 10 명령어는 부팅 시 실행된 서비스 중 초기화 소요 시간이 가장 긴 상위 10개 서비스를 내림차순으로 정렬하여 확인합니다.
실행 결과에서는 systemd-resolved.service(68ms)와 ldconfig.service(67ms)가 부팅 초기화 과정에서 가장 많은 시간을 소비했음을 알 수 있습니다.

systemd-analyze blame | head -n 10

2. 부팅 지연의 핵심 경로 추적하기 (critical-chain)

systemd-analyze critical-chain 명령어는 시스템 부팅 완료에 직접적인 영향을 미친 서비스들의 종속성 트리(임계 경로)를 출력합니다.
출력 결과의 @ 기호 뒤는 유닛이 활성화되거나 시작된 시각을 나타내며, + 기호 뒤는 해당 유닛 자체의 실행에 소요된 시간을 의미합니다.
결과 트리를 보면 graphical.target(315ms)에 도달하기까지 systemd-resolved.service(68ms)와 systemd-journald.service(39ms) 등이 직렬로 연결되어 전체 부팅 지연을 초래한 핵심 병목 경로임을 확인할 수 있습니다.

systemd-analyze critical-chain

systemd-analyze critical-chain networking.service 명령어는 특정 서비스(여기서는 networking.service)를 지정하여 해당 서비스가 시작되기까지의 임계 체인만 선별적으로 추적합니다.
시스템 전체 경로 대신 특정 네트워크나 백엔드 서비스의 병목 종속성만 분리하여 분석하고자 할 때 유용하게 활용할 수 있습니다.

systemd-analyze critical-chain networking.service

3. 부팅 타임라인 시각화 SVG 리포트 생성 (plot)

부팅 분석 리포트 파일을 체계적으로 저장하고 관리하기 위해 mkdir -p ~/systemd-reports 명령어를 실행하여 전용 디렉터리를 생성합니다.

mkdir -p ~/systemd-reports

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg 명령어는 전체 부팅 과정에서 실행된 각 서비스의 시작 시점과 실행 소요 시간을 시각적 타임라인 형태의 SVG 그래픽 파일로 생성하여 저장합니다.
텍스트 로그만으로는 파악하기 힘든 서비스 간의 병렬 실행 흐름과 지연 구간을 그래픽 차트로 직관적으로 확인할 수 있습니다.

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg

ls -lh ~/systemd-reports/boot-analysis.svg 명령어는 생성된 SVG 리포트 파일의 존재 여부와 파일 크기(59KB) 등 상세 정보를 확인합니다.
생성된 SVG 파일은 웹 브라우저나 이미지 뷰어를 통해 열어 상세한 부팅 타임라인 차트를 시각적으로 분석할 수 있습니다.

ls -lh ~/systemd-reports/boot-analysis.svg

4. 서비스 유닛 설정 오류 및 보안 상태 검증 (verify & security)

sudo systemd-analyze verify /lib/systemd/system/ssh.service 명령어는 지정한 유닛 파일의 문법적 오류나 설정 누락 여부를 사전에 검증합니다.
실행 결과 아무런 메시지가 출력되지 않는 것은 해당 서비스 유닛 파일에 문법적 결함이나 설정 오류가 없음을 의미합니다.

sudo systemd-analyze verify /lib/systemd/system/ssh.service

systemd-analyze security ssh.service 명령어는 지정한 서비스 유닛의 보안 격리 설정과 시스템 노출 수준(Security Exposure)을 진단합니다.
실행 결과를 통해 루트 권한 실행 여부(User=), 디바이스 접근 제어(PrivateDevices=), 권한 상승 방지(NoNewPrivileges=) 등 주요 보안 항목의 적용 상태와 위험 노출 점수를 상세하게 확인할 수 있습니다.

systemd-analyze security ssh.service

지금까지 systemd-analyze 명령어를 활용해 부팅 지연의 원인이 되는 병목 서비스를 확인하고 최적화하는 방법을 간단하게 살펴보았습니다.
불필요한 서비스를 정리하여 한층 더 쾌적하고 빠른 리눅스 부팅 환경을 만들어보세요.