컴퓨터를 켰는데, 켜지는 데 너무 오래 걸린다고 느껴본 적 있으신가요? 답답한 부팅 시간을 줄이고 싶다면, systemd-analyze
명령어를 사용하는 방법을 알아야 합니다. systemd-analyze
는 systemd 시스템 및 서비스 관리자의 강력한 도구 중 하나로, 부팅 성능을 분석하고 병목 현상을 찾아 해결하는 데 도움을 줍니다. 이 글에서는 systemd-analyze
를 활용하여 부팅 시간을 진단하고 개선하는 방법을 자세히 알아보겠습니다.
systemd-analyze란 무엇일까요?
systemd-analyze
는 systemd 시스템의 부팅 프로세스에 대한 다양한 정보를 제공하는 명령어입니다. 단순히 부팅 시간을 알려주는 것뿐만 아니라, 각 서비스가 시작되는 데 걸리는 시간, 부팅 프로세스에서 가장 오래 걸리는 부분 등을 파악할 수 있도록 도와줍니다. 이 정보를 바탕으로 불필요한 서비스를 끄거나, 시작 순서를 최적화하는 등의 조치를 취하여 부팅 속도를 향상시킬 수 있습니다.
왜 부팅 시간 분석이 중요할까요?
-
- 생산성 향상: 부팅 시간이 짧아지면 컴퓨터를 더 빨리 사용할 수 있게 되어 생산성이 향상됩니다.
-
- 사용자 경험 개선: 빠른 부팅은 사용자에게 쾌적한 경험을 제공합니다.
- 문제 진단: 부팅 시간 분석을 통해 시스템의 잠재적인 문제점을 발견하고 해결할 수 있습니다.
- 자원 효율성: 불필요한 서비스 시작을 방지하여 시스템 자원을 효율적으로 사용할 수 있습니다.
systemd-analyze 기본 사용법
systemd-analyze
를 사용하는 것은 매우 간단합니다. 터미널을 열고 다음과 같은 명령어를 입력하면 됩니다.
systemd-analyze
이 명령어는 총 부팅 시간을 보여줍니다. 예를 들어 다음과 같은 결과를 얻을 수 있습니다.
Startup finished in 5.234s (kernel) + 7.891s (userspace) = 13.125s
이 결과는 커널 초기화에 5.234초, 사용자 공간 초기화에 7.891초가 걸려 총 13.125초 만에 부팅이 완료되었다는 것을 의미합니다.
세부 정보 확인하기
더 자세한 정보를 얻기 위해 다음과 같은 옵션을 사용할 수 있습니다.
blame 옵션
blame
옵션은 부팅 프로세스에서 가장 오래 걸리는 서비스들을 보여줍니다. 이를 통해 어떤 서비스가 부팅 속도를 늦추는지 파악할 수 있습니다.
systemd-analyze blame
출력 결과는 다음과 같은 형태를 가집니다.
7.234s NetworkManager-wait-online.service
2.123s systemd-journal-flush.service
1.543s lvm2-monitor.service
…
가장 시간이 오래 걸리는 서비스부터 나열되므로, 이 목록을 통해 어떤 서비스를 먼저 살펴봐야 할지 알 수 있습니다.
critical-chain 옵션
critical-chain
옵션은 특정 서비스가 시작되기 위해 필요한 다른 서비스들의 의존성 체인을 보여줍니다. 이를 통해 부팅 프로세스의 흐름을 이해하고, 어떤 서비스가 병목 현상을 일으키는지 파악할 수 있습니다.
systemd-analyze critical-chain [서비스 이름]
예를 들어, NetworkManager-wait-online.service
의 의존성 체인을 확인하려면 다음과 같이 입력합니다.
systemd-analyze critical-chain NetworkManager-wait-online.service
출력 결과는 다음과 같은 형태를 가집니다.
@NetworkManager-wait-online.service +7.234s
└─@NetworkManager.service +0.543s
└─@dbus.service +0.021s
└─@basic.target @0.000s
└─@sockets.target @0.000s
└─@sysinit.target @0.000s
└─@systemd-update-utmp.service @0.000s
└─@auditd.service @0.000s
└─@local-fs.target @0.000s
└─@boot.mount @0.000s
└─@systemd-fsck@dev-disk-by\x2duuid-….service @0.000s
└─@local-fs-pre.target @0.000s
└─@systemd-journal-flush.service @0.000s
└─@systemd-journald.service @0.000s
└─@syslog.socket @0.000s
└─@sockets.target @0.000s
└─@basic.target @0.000s
└─@sysinit.target @0.000s
└─@systemd-update-utmp.service @0.000s
└─@auditd.service @0.000s
└─@local-fs.target @0.000s
└─@boot.mount @0.000s
└─@systemd-fsck@dev-disk-by\x2duuid-….service @0.000s
└─@local-fs-pre.target @0.000s
└─@systemd-journal-flush.service @0.000s
└─@systemd-journald.service @0.000s
└─@syslog.socket @0.000s
└─@sockets.target @0.000s
└─@basic.target @0.000s
└─@sysinit.target @0.000s
└─@systemd-update-utmp.service @0.000s
└─@auditd.service @0.000s
└─@local-fs.target @0.000s
└─@boot.mount @0.000s
└─@systemd-fsck@dev-disk-by\x2duuid-….service @0.000s
└─@local-fs-pre.target @0.000s
└─@systemd-journal-flush.service @0.000s
└─@systemd-journald.service @0.000s
└─@syslog.socket @0.000s
└─@sockets.target @0.000s
└─@basic.target @0.000s
└─@sysinit.target @0.000s
└─@systemd-update-utmp.service @0.000s
└─@auditd.service @0.000s
└─@local-fs.target @0.000s
└─@boot.mount @0.000s
└─@systemd-fsck@dev-disk-by\x2duuid-….service @0.000s
└─@local-fs-pre.target @0.000s
└─@systemd-journal-flush.service @0.000s
└─@systemd-journald.service @0.000s
└─@syslog.socket @0.000s
└─@sockets.target @0.000s
└─@basic.target @0.000s
└─@sysinit.target @0.000s
└─@systemd-update-utmp.service @0.000s
└─@auditd.service @0.000s
└─@local-fs.target @0.000s
└─@boot.mount @0.000s
└─@systemd-fsck@dev-disk-by\x2duuid-….service @0.000s
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─syslog.socket
└─sockets.target
└─basic.target
└─sysinit.target
└─systemd-update-utmp.service
└─auditd.service
└─local-fs.target
└─boot.mount
└─systemd-fsck@dev-disk-by\x2duuid-….service
└─local-fs-pre.target
└─systemd-journal-flush.service
└─systemd-journald.service
└─sys