systemd-analyze 로 부팅 시간(booting time) 및 문제있는 서비스 확인하기
개인집에서 사용하고 있는 만자로 리눅스(manjaro linux) 가 부팅 속도가 무지 느려지는 문제가 발생했습니다.
리눅스 부팅 속도 저하 문제는 보통 systemd 로 구동하는 서비스로 인해서인데 이런 문제를 파악하려면 부팅 시간, 서비스별 부팅 시간등을 확인할 수 있어야 합니다.
systemd-analyze 는 이럴 때 사용할 수 있는 유틸리티로 system 과 service 의 여러 가지 통계 정보와 부팅 성능등에 관한 지표를 살펴볼 수 있습니다.
TL;DR
다음 명령어를 사용해서 서비스별 소요 시간을 확인한 후에 느린 서비스를 찾아서 해결합니다.
$ sudo systemd-analyze blame $ systemd-analyze critical-chain
저는 systemd-tmpfiles-setup 라는 서비스가 1분 30초를 까먹었는데 원인은 swap file 이 제대로 설정되지 않아서였고 제대로 된 swap file 을 만들어주고 /etc/fstab 에 등록한 후에 재부팅하자 정상 속도로 부팅이 되었습니다.
systemd-analyze 사용
전체 부팅 시간 확인
time 부팅 시간에 대한 자세한 정보를 제공하는 명령어로 systemd-analyze 를 옵션없이 구동하면 time 명령어가 기본적으로 적용됩니다.
$ sudo systemd-analyze time Startup finished in 1.564s (kernel) + 1min 44.906s (userspace) = 1min 46.471s graphical.target reached after 1min 33.385s in userspace
위 정보는 전체 부팅 시간이 1분46초이고 커널에서 1.5초, 사용자 공간에서 1분44초를 소비했다는 정보를 출력하고 있으며 현재 systemd 의 target이 graphical 인 것을 나타내고 있습니다.
서비스별 부팅 시간 확인
blame 명령을 주고 실행하면 부팅시 오래 걸린 서비스별로 정렬해서 표시해 줍니다.
$ sudo systemd-analyze blame 57.580s pamac-mirrorlist.service 14.102s NetworkManager-wait-online.service 2.874s man-db.service 2.628s mariadb.service 1.427s vmware-networks.service 1.117s systemd-logind.service 638ms lvm2-monitor.service
느린 유닛을 tree 로 보기
critical-chain 은 시간에 영향을 주는 unit 을 tree 로 보여주는 명령어입니다.
$ systemd-analyze critical-chain graphical.target @1min 33.385s └─multi-user.target @1min 33.385s └─vmware-networks.service @1min 30.723s +1.427s └─basic.target @1min 30.712s └─sockets.target @1min 30.712s └─snapd.socket @1min 30.712s +631us └─sysinit.target @1min 30.709s └─systemd-timesyncd.service @1min 30.502s +207ms └─systemd-tmpfiles-setup.service @1min 30.489s +10ms
계층으로 보여주므로 각 유닛별 소요 시간을 쉽게 볼 수 있는데 systemd-tmpfiles-setup 서비스에서 엄청난 시간이 걸렸으며 이 서비스를 개선해야 한다는 것을 알 수 있습니다.
부팅 과정을 svg로 저장
plot 명령을 사용하면 전체 부팅 과정을 svg 로 저장할 수 있습니다
$ systemd-analyze plot > bootup.svg
이제 SVG 뷰어로 bootup.svg 를 열어보면 됩니다.