개인집에서 사용하고 있는 만자로 리눅스(manjaro linux) 가 부팅 속도가 무지 느려지는 문제가 발생했습니다.


리눅스 부팅 속도 저하 문제는 보통 systemd 로 구동하는 서비스로 인해서인데 이런 문제를 파악하려면 부팅 시간, 서비스별 부팅 시간등을 확인할 수 있어야 합니다.


systemd-analyze 는 이럴 때 사용할 수 있는 유틸리티로 system 과 service 의 여러 가지 통계 정보와 부팅 성능등에 관한 지표를 살펴볼 수 있습니다.

TL;DR

다음 명령어를 사용해서 서비스별 소요 시간을 확인한 후에 느린 서비스를 찾아서 해결합니다.

$ sudo systemd-analyze blame
$ systemd-analyze critical-chain 
CODE

저는 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
CODE

위 정보는 전체 부팅 시간이 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      
CODE


느린 유닛을 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
CODE


계층으로 보여주므로 각 유닛별 소요 시간을 쉽게 볼 수 있는데 systemd-tmpfiles-setup 서비스에서 엄청난 시간이 걸렸으며 이 서비스를 개선해야 한다는 것을 알 수 있습니다.

부팅 과정을 svg로 저장

plot 명령을 사용하면 전체 부팅 과정을 svg 로 저장할 수 있습니다

$ systemd-analyze plot > bootup.svg
CODE


이제 SVG 뷰어로 bootup.svg 를 열어보면 됩니다.



같이 보기

Ref