컴퓨터를 켰는데, 켜지는 데 너무 오래 걸린다고 느껴본 적 있으신가요? 답답한 부팅 시간을 줄이고 싶다면, 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

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다