부팅 시간을 기록하는 방법은 무엇입니까?

부팅 시간을 기록하는 방법은 무엇입니까?

내 Arch-Linux 시스템의 부팅 성능에 대한 아이디어를 얻기 위해 매일 설치된 소프트웨어 버전(커널 및 기타 소프트웨어)과 비교하여 부팅 시간(시스템을 부팅하는 데 걸리는 시간)을 모니터링하고 싶습니다.

systemd-analyze time부팅 시간을 얻기 위해 systemd 명령을 사용합니다 .

내 생각은 로그를 갖는 것입니다.

[day]
.......Boot time [s]:  2.145 (kernel) + 13.675 (userspace)
.......with kernel version 4.11.2
.......gnome-shell version 3.24.1
[day+1]
.......Boot time [s]:  3.145 (kernel) + 21.665 (userspace)
.......with kernel version 4.17.11
.......gnome-shell version 3.28.3

어떡해?

답변1

기본 아이디어

나는 이것을 시스템 서비스로 수행하고 파일에 기록하고 싶습니다.

$ systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//'
442ms (kernel) + 10.224s (userspace)

systemd-analyze time이렇게 하면 원하는 비트로 출력이 줄어듭니다 . 원하는 나머지 정보는 uname명령 gnome-shell줄 자체를 통해 쉽게 사용할 수 있습니다.

$ systemd-analyze time | \
    sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//'; \
    printf "kernel: %s\ngnome-shell: %s\n" "$(uname -r)" "$(gnome-shell --version)"
442ms (kernel) + 10.224s (userspace)
kernel: 3.10.0-693.21.1.el7.x86_64
gnome-shell: GNOME Shell 3.25.4

좀 더 세련된

위의 스크립트와 같이:

$ cat ./boottime.bash
#!/bin/bash

printf "[%s]\n" "$(date)"
printf ".......Boot time [s]: %s\n" "$(systemd-analyze time | sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//')"
printf ".......with kernel version: %s\n" "$(uname -r)"
printf ".......gnome-shell version: %s\n" "$(gnome-shell --version)"

#[day]
#.......Boot time [s]:  2.145 (kernel) + 13.675 (userspace)
#.......with kernel version 4.11.2
#.......gnome-shell version 3.24.1
#[day+1]
#.......Boot time [s]:  3.145 (kernel) + 21.665 (userspace)
#.......with kernel version 4.17.11
#.......gnome-shell version 3.28.3

산출:

$ ./boottime.bash
[Sat Aug  4 14:34:40 EDT 2018]
.......Boot time [s]: 442ms (kernel) + 10.224s (userspace)
.......with kernel version: 3.10.0-693.21.1.el7.x86_64
.......gnome-shell version: GNOME Shell 3.25.4

유닛 파일:

$ cat /etc/systemd/system/boottime.service
[Unit]
Description=Boottime Service
After=systend-user-sessions.service

[Service]
Type=simple
ExecStart=/opt/bin/boottime.bash

시스템 구문 분석이 너무 깁니다. 구문 분석 시간

위에서 사용한 작동 원리 sed는 다음과 같습니다.

sed 's/Startup finished in //;s/ +.*(initrd)//;s/ =.*$//')"
  • s/Startup finished in //- 왼쪽에서 오른쪽으로 모두 삭제in
  • s/ +.*(initrd)//- +다음부터 모두 삭제(initrd)
  • s/ =.*$//- 줄의 처음부터 =끝까지 문자열 의 끝 부분을 모두 제거합니다.$

관련 정보