개방 실습: 성능 모니터링 툴 선택

성능 체크리스트

이 랩에서는 다양한 시스템 모니터링 툴을 사용하여 시스템 동작을 관찰합니다.

결과

다음을 수행할 수 있습니다.

  • sysstat 패키지를 설치하고 시스템 활동 보고서를 생성하도록 구성합니다.
  • Performance Co-Pilot을 설치하고 원시 데이터를 캡처하여 로컬 및 원격 시스템을 모니터링하도록 구성합니다.
  • Performance Co-Pilot 차트를 사용하여 특정 시스템 아카이브 로그의 성능 지표를 표시합니다.

workstation VM에 student 사용자로 로그인합니다. 이때 암호는 student를 사용합니다.

workstation에서 lab perftools-review start 명령을 실행합니다. 이 명령은 네트워크에 있는 serverb 호스트에 연결할 수 있는지 여부를 확인하고 이 랩 연습의 호스트에 필수 파일을 복사합니다.

[student@workstation ~]$lab perftools-review start
  1. workstation VM에서 Performance Co-Pilot 차트를 실행하여 로컬 및 원격 성능 지표를 모니터링하도록 시스템을 구성합니다.

    1. pcp-gui 패키지를 설치합니다.

       [student@workstation ~]$sudo yum install pcp-gui
    2. Performance Co-Pilot 지표 수집기 데몬을 시작하고 활성화합니다.

       [student@workstation ~]$sudo systemctl enable --now pmcd
  2. workstation에서 ssh를 사용하여 serverbstudent 사용자로 로그인합니다. 권한을 root 사용자 계정으로 에스컬레이션합니다.

    1. student 사용자로 serverb에 로그인합니다.

       [student@workstation ~]$ssh student@serverb
       [student@serverb ~]$sudo -i
       [root@serverb ~]#
  3. serverb에서 sysstat-collect.timersysstat-collect.service라는 systemd 장치를 제공하는 패키지를 설치합니다. 1분마다 한 번씩 시스템 활동 데이터를 수집하도록 타이머 장치 구성 파일을 수정합니다.

    1. sysstat 패키지를 설치합니다.

       [root@serverb ~]#yum install sysstat
       ...output omitted...
      
    2. /usr/lib/systemd/system/sysstat-collect.timer/etc/systemd/system/sysstat-collect.timer에 복사합니다.

       [root@serverb ~]#cp /usr/lib/systemd/system/sysstat-collect.timer \
       /etc/systemd/system/sysstat-collect.timer
      
    3. 타이머 장치가 1분마다 한 번씩 실행되도록 /etc/systemd/system/sysstat-collect.timer를 편집합니다.

       [root@serverb ~]#vim /etc/systemd/system/sysstat-collect.timer
       ...output omitted...
       #        Activates activity collector once every minute
      
       [Unit]
       Description=Run system activity accounting tool once every minute
      
       [Timer]
       OnCalendar=*:00/01
      
       [Install]
       WantedBy=sysstat.service
      
    4. systemctl daemon-reload 명령을 사용하여 systemd에 변경 사항을 알립니다.

       [root@serverb ~]#systemctl daemon-reload
    5. systemctl 명령을 사용하여 sysstat-collect.timer 타이머 장치를 활성화합니다.

       [root@serverb ~]#systemctl enable --now sysstat-collect.timer
  4. serverb에 Performance Co-Pilot 패키지를 설치하여 기본 시스템 수준 성능 모니터링과 추가 시스템 모니터링 툴을 제공하는 PCP 모듈을 지원합니다. 성능 지표 수집기 데몬을 활성화하고 시작합니다.

    1. pcp 및 pcp-system-tools 패키지를 설치합니다.

       [root@serverb ~]#yum install pcp pcp-system-tools
       ...output omitted...
       Complete!
      
    2. Performance Co-Pilot 지표 수집기 데몬을 시작하고 활성화합니다.

       [root@serverb ~]#systemctl enable --now pmcd
       ...output omitted...
      
  5. serverb에서 실행되는 성능 지표 수집기 데몬에 대한 원격 액세스를 구성합니다.

    1. firewall-cmd 명령을 사용하여 pmcd 서비스를 추가합니다.

       [root@serverb ~]#firewall-cmd --permanent --add-service="pmcd"
       success
      
    2. 방화벽 구성을 다시 로드합니다.

       [root@serverb ~]#firewall-cmd --reload
       success
      
    3. 방화벽 구성을 확인합니다.

       [root@serverb ~]#firewall-cmd --list-all
       public (active)
         target: default
         icmp-block-inversion: no
         interfaces: enp1s0
         sources:
         services: cockpit dhcpv6-client pmcd ssh
         ports:
         protocols:
         masquerade: no
         forward-ports:
         source-ports:
         icmp-blocks:
         rich rules:
      
  6. serverb에서 Performance Co-Pilot을 통해 mem.util.used 지표 샘플 10개를 캡처합니다. 출력을 /tmp/mem-util-used-grade.data로 리디렉션합니다.

    [root@serverb ~]# **pmval -s 10 mem.util.used > /tmp/mem-util-used-grade.data**

  7. serverb에서 http://materials.example.com/labs/perftools-review/sampleserver.tgzsampleserver.tgz Performance Co-Pilot 로그 아카이브를 다운로드합니다. 경험한 최대 1분 부하 평균을 확인하고 이 값을 /tmp/high-1min-load.data에 저장합니다. 작업을 마쳤으면 1분 부하 평균이 처음으로 해당 값에 도달한 시간을 확인하고 이 값을 /tmp/time-1min-load.data에 저장합니다.

    1. 샘플 시스템에 대한 Performance Co-Pilot 로그 데이터를 다운로드합니다.

       [root@serverb ~]#wget \
       http://materials.example.com/labs/perftools-review/sampleserver.tgz
      
    2. 아카이브의 압축을 풀어 Performance Co-Pilot 로그 데이터에 액세스합니다.

       [root@serverb ~]#tar -xf sampleserver.tgz
    3. 1분 부하 평균을 제공하는 매개 변수를 확인합니다.

       [root@serverb ~]#pminfo | grep load
       ...output omitted...
       kernel.all.load
       ...output omitted...
      
       [root@serverb ~]#pminfo -t kernel.all.load
       kernel.all.load [1, 5 and 15 minute load average]
      
    4. 경험한 최대 1분 부하 평균을 확인합니다. 이 값을 /tmp/high-1min-load.data로 리디렉션합니다.

       [root@serverb ~]#pmval -a sampleserver.log/20150223.12.24.0 \
       kernel.all.load | tail -n +11 | \
       awk '{print $2}' | sort -rn | \
       head -n 1 > /tmp/high-1min-load.data
      
    5. 다음과 일치하는 내용이 있는지 확인합니다.

       [root@serverb ~]#cat /tmp/high-1min-load.data
       19.12
      
    6. 1분 부하 평균이 19.12에 처음으로 도달한 시간을 확인합니다. 이 값을 /tmp/time-1min-load.data로 리디렉션합니다. 다양한 표준 시간대의 시스템에 시간값을 표시할 때 일관성을 유지하려면 아카이브의 표준 시간대를 알아야 합니다.

       [root@serverb ~]#pmdumplog -L sampleserver.log/20150223.12.24.0
       Log Label (Log Format Version 2)
       Performance metrics from host server0.example.com
           commencing Mon Feb 23 11:24:41.562205 2015
           ending     Mon Feb 23 11:54:41.500123 2015
       Archive timezone: EST+5
       PID for pmlogger: 9217
      
       [root@serverb ~]#pmval -a sampleserver.log/20150223.12.24.0 \
       -Z EST+5 kernel.all.load | grep 19\.12 | \
       head -n 1 > /tmp/time-1min-load.data
      
    7. 다음과 일치하는 내용이 있는지 확인합니다.

       [root@serverb ~]#cat /tmp/time-1min-load.data
       12:32:41.562      19.12          5.060         1.860
      
  8. serverb에서 http://materials.example.com/labs/perftools-review/sar-server.data의 기존 sar 아카이브 파일을 다운로드합니다. ~/sar-server.data에 기록된 대로 enp1s0 인터페이스에 대해 초당 받은 최대 네트워크 패킷 수를 확인합니다. HH:MM:SS Packets 형식을 사용하여 패킷 수와 시간을 /tmp/net-grade.data 파일에 기록합니다.

    1. http://materials.example.com/labs/perftools-review/sar-server.data/home/student로 다운로드합니다.

       [root@serverb ~]#wget \
       http://materials.example.com/labs/perftools-review/sar-server.data
       ...output omitted...
      
    2. sar 명령을 사용하여 아카이브 파일의 처음 10줄을 읽고 형식을 식별합니다. (sar-server.data 는 바이너리 파일임)

       [root@serverb ~]#sar -n DEV -f sar-server.data | head
       Linux 4.18.0-80.el8.x86_64 (serverb.lab.example.com)     07/04/2019     _x86_64_    (2 CPU)
      
       00:04:26     LINUX RESTART    (2 CPU)
      
       12:06:01 AM   IFACE  rxpck/s  txpck/s ... %ifutil
       12:07:01 AM      lo     0.00     0.00        0.00
       12:07:01 AM  enp1s0     1.13     0.50        0.00
       12:08:01 AM      lo     0.00     0.00        0.00
       12:08:01 AM  enp1s0     0.62     0.12        0.00
       12:09:01 AM      lo     0.00     0.00        0.00
      
    3. 다음 필터를 사용하여 시간 및 받은 패킷 값을 구문 분석합니다.

      • sar -n DEV -f sar-server.data는 기존 tar 파일의 네트워크 통계를 보고합니다.

      • grep '^[^A].*enp1s0'Average 단어로 시작하는 줄과 같이 타임스탬프로 시작하지 않는 줄을 제거한 후에 enp1s0과 관련된 줄만 격리합니다.

      • awk '{print $1, $4}' | sort -rnk 2grep 명령을 통해 생성된 출력의 첫 번째 열과 세 번째 열을 출력하고, 3열에서 내림차순으로 숫자 정렬을 수행합니다.

      • head -n+1 > /tmp/net-grade.data는 정렬된 데이터의 첫째 줄을 /tmp/net-grade.data 파일로 리디렉션합니다.

        [root@serverb ~]#sar -n DEV -f sar-server.data | \
        grep '^[^A].*enp1s0' | \
        awk '{print $1, $4}' | sort -rnk 2 | \
        head -n+1 > /tmp/net-grade.data
        
    4. 결과가 다음과 일치하는지 확인합니다.

       [root@serverb ~]#cat /tmp/net-grade.data
       01:08:01 202.23
      
    5. serverb에서 로그아웃합니다.

       [root@serverb ~]#exit
       [student@serverb ~]$exit
       [student@workstation ~]$
      
  9. workstation VM에서 Performance Co-Pilot 차트를 사용하여 mem.util.used, disk.all.aveq, proc.nprocs 성능 지표가 포함된 원격 호스트 serverb의 뷰를 생성합니다. 해당 뷰의 이름을 442labview로 지정합니다.

    1. pmchart 인터페이스를 시작하여 serverb 원격 호스트에 연결합니다.

       [student@workstation ~]$pmchart -h serverb &
    2. 세 가지 성능 지표를 추가합니다.

      New Chart(새 차트) 버튼을 클릭합니다. Metrics(지표) 탭에서 memutilused를 선택합니다. OK(확인) 버튼을 클릭합니다.

      New Chart(새 차트) 버튼을 클릭합니다. Metrics(지표) 탭에서 diskallaveq를 선택합니다. OK(확인) 버튼을 클릭합니다.

      New Chart(새 차트) 버튼을 클릭합니다. Metrics(지표) 탭에서 procnprocs를 선택합니다. OK(확인) 버튼을 클릭합니다.

    3. 뷰를 442labview로 저장합니다.

      File(파일) 메뉴를 열고 Save View(뷰 저장)...를 선택합니다.

      Path(경로): 필드를 /home/student로 변경합니다.

      Filename(파일 이름): 필드에 442labview를 입력합니다.

      Save(저장) 버튼을 클릭합니다.

    4. PCP 차트의 그래픽 인터페이스를 종료합니다.

      File(파일) 메뉴를 열고 Quit(종료)를 선택합니다.

평가

workstation에서 lab perftools-review grade 명령을 실행하여 이 연습의 성공 상태를 확인합니다.

[student@workstation ~]$lab perftools-review grade

완료

workstation에서 lab perftools-review finish 명령을 실행하여 이 연습을 완료합니다.

[student@workstation ~]$lab perftools-review finish

이 연습에서는 Performance Co-Pilot을 사용하여 성능 지표를 수집하고 저장합니다.

결과

Performance Co-Pilot 패키지를 설치하고 툴 사용을 시연할 수 있어야 합니다.

workstation VM에서 student 사용자로 로그인합니다. 이때 암호는 student를 사용합니다.

workstation VM에서 lab perftools-copilot start 명령을 실행합니다. 이 명령은 네트워크에 있는 servera 호스트에 연결할 수 있는지 여부를 확인하고 이 연습을 위해 준비합니다.

[student@workstation ~]$lab perftools-copilot start

참고

권한 에스컬레이션을 위해 sudo 명령을 사용하도록 지시를 받은 경우 student를 암호로 사용합니다.

  1. workstation VM에서 ssh 명령을 사용하여 serverastudent 사용자로 로그인합니다. 인증에 SSH 키를 사용하도록 시스템이 구성되었으므로 servera에 로그인하는 데 암호는 필요하지 않습니다.

     [student@workstation ~]$ssh student@servera
     [student@servera ~]$
    
  2. servera에서 기본 및 확장된 PCP 툴 세트를 제공하는 필수 패키지를 설치합니다. 성능 지표 수집기 데몬을 시작하고 활성화합니다.

    1. pcp 및 pcp-system-tools 패키지를 설치합니다.

       [student@servera ~]$sudo yum install pcp pcp-system-tools
       [sudo] password for student:student
       ...output omitted...
       Complete!
      
    2. pmcd 데몬을 시작하고 활성화합니다.

       [student@servera ~]$sudo systemctl enable --now pmcd
       ...output omitted...
      
  3. 레거시 툴과 비교되는 하위 명령과 함께 pcp 명령을 사용하여 정보를 수집합니다.

    1. 하위 명령 인수 없이 pcp 명령을 사용하여 Performance Co-Pilot 구성을 요약합니다.

       [student@servera ~]$pcp
       Performance Co-Pilot configuration on servera.lab.example.com:
      
        platform: Linux servera.lab.example.com 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64
        hardware: 2 cpus, 4 disks, 1 node, 1829MB RAM
        timezone: CDT+5
        services: pmcd
            pmcd: Version 4.3.0-1, 8 agents
            pmda: root pmcd proc xfs linux mmv kvm jbd2
      
    2. pcp free 명령을 사용하여 소켓 통계를 표시합니다.

       [student@servera ~]$pcp free
                    total     used     free  shared  buffers  cached
       Mem:       1872932   614300  1258632       0     2104  356424
       -/+ buffers/cache:   255772  1617160
       Swap             0        0        0
      
    3. pcp dstat 명령을 사용하여 vda의 디스크 사용량과 관련된 자세한 정보를 표시합니다.

      백그라운드에서 dd 명령을 사용하여 /home/student/diskreads 파일에 대한 디스크 쓰기를 생성합니다. pcp dstat 명령을 사용하여 1초마다 데이터를 수집하고 출력을 10회 반복 표시하는 타임스탬프 및 디스크 통계를 표시합니다.

       [student@servera ~]$dd if=/dev/zero of=diskreads bs=512 \
       count=2M oflag=dsync &
       [student@servera ~]$pcp dstat --nocolor -tdD vda 1 10
       ----system---- --dsk/vda--
            time     | read  writ
       28-06 08:10:52|
       28-06 08:10:53|   0   111M
       28-06 08:10:54|   0   128M
       28-06 08:10:55|   0   112M
       28-06 08:10:56|   0   112M
       28-06 08:10:57|   0   111M
       28-06 08:10:58|   0     0
       28-06 08:10:59|   0     0
       28-06 08:11:00|1838k    0
       28-06 08:11:01|   0    10k
      

      kill $(pidof dd) 명령을 사용하여 dd 명령을 종료합니다.

       [student@servera ~]$kill $(pidof dd)
       [student@servera ~]$
      
  4. pmstat 명령을 사용하여 1분 부하 평균, 스와핑 통계, 시스템 인터럽트 비율 및 컨텍스트 전환, CPU 사용자 코드, 시스템 및 인터럽트 처리 코드, 유휴 루프 통계를 캡처합니다.

    루프 구조로 sha1sum /dev/zero & 명령 인스턴스 4개를 실행하여 시스템에 워크로드를 적용한 다음, pmstat 명령을 실행합니다. 약 15회 반복하면서 값의 변화를 관찰합니다. PID 및 통계 값은 명령을 실행할 때마다 달라집니다.

     [student@servera ~]$for i in $(seq 1 4); do sha1sum /dev/zero & done
     [1] 2154
     [2] 2155
     [3] 2156
     [4] 2157
    
     [student@servera ~]$pmstat
     @ Sun Jun 30 15:54:33 2019
      loadavg                  memory    swap      io     system         cpu
        1 min swpd   free buff  cache  pi  po  bi  bo    in   cs  us  sy  id
         0.70    0  1229m 2104 364200   0   0   0   0  2017  307  95   5   0
         0.96    0  1229m 2104 364200   0   0   0   0  2016  305  96   4   0
         1.20    0  1229m 2104 364200   0   0   0   0  2014  304  95   5   0
         1.59    0  1229m 2104 364200   0   0   0   0  2015  307  95   5   0
         1.94    0  1229m 2104 364200   0   0   0   0  2013  306  95   5   0
         2.11    0  1220m 2104 364220   0   0   0   0  2069  404  95   5   0
         2.34    0  1228m 2104 364212   0   0   0  27  2099  458  95   5   0
         2.55    0  1228m 2104 364212   0   0   0   0  2014  304  96   4   0
         2.67    0  1228m 2104 364212   0   0   0   0  2013  303  96   4   0
         2.78    0  1228m 2104 364212   0   0   0   0  2015  304  95   5   0
         2.87    0  1228m 2104 364212   0   0   0   0  2013  304  95   5   0
         2.96    0  1228m 2104 364212   0   0   0   0  2015  299  96   4   0
         3.05    0  1228m 2104 364212   0   0   0  18  2015  308  95   5   0
         3.12    0  1228m 2104 364212   0   0   0   0  2016  306  95   5   0
         3.19    0  1228m 2104 364212   0   0   0   0  2014  306  95   5   0
     ...output omitted...
    

    Ctrl+C를 눌러 pmstat 명령을 종료합니다.

    pkill sha1sum 명령을 사용하여 sha1sum /dev/zero 명령 인스턴스를 모두 종료합니다.

     [student@servera ~]$pkill sha1sum
     [2]   Terminated              sha1sum /dev/zero
     [3]-  Terminated              sha1sum /dev/zero
     [1]-  Terminated              sha1sum /dev/zero
     [4]+  Terminated              sha1sum /dev/zero
    
  5. 사용 가능한 메모리를 추적하는 pcp 성능 지표를 찾습니다. 찾은 후에는 해당 설명을 표시하고 간격당 15초 속도로 샘플 출력 5개를 수집합니다.

     [student@servera ~]$pminfo | grep free
     mem.freemem
     ...output omitted...
    
     [student@servera ~]$pminfo -dt mem.freemem
     mem.freemem
         Data Type: 64-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
         Semantics: instant  Units: Kbyte
    

    통계 값은 명령을 실행할 때마다 달라집니다.

     [student@servera ~]$pmval -t 15 -s 5 mem.freemem
     metric:    mem.freemem
     host:      servera.lab.example.com
     semantics: instantaneous value
     units:     Kbyte
     samples:   5
     interval:  15.00 sec
                   1261872
                   1261904
                   1261904
                   1261904
                   1261936
    
  6. servera에서 로그아웃합니다.

     [student@servera ~]$exit
     logout
     Connection to servera closed.
     [student@workstation ~]$
    
  7. workstation VM에서 pmchart 명령을 사용하여 그래픽 사용자 인터페이스를 시작합니다. 차트 2개(사용 가능한 메모리 차트 및 en*X* 인터페이스의 아웃바운드 바이트 차트)를 표시합니다.

    중요

    네트워크 인터페이스 이름은 부팅하는 동안 버스 유형 및 장치 탐지 순서에 따라 결정됩니다. 네트워크 인터페이스 이름은 사용 중인 과정 플랫폼 및 하드웨어에 따라 다릅니다.

    현재 시스템에서 이더넷 주소 52:54:00:00:fa:09와 연결된 인터페이스 이름(예: ens06 또는 enp1s0)을 찾습니다. 이 인터페이스 이름을 사용하여 이 연습에서 사용된 en*X* 자리 표시자를 대체합니다.

    1. workstation VM에 pcp-gui 패키지를 설치합니다.

       [student@workstation ~]$sudo yum install pcp-gui
       [sudo] password for student:student
       ...output omitted...
       Complete!
      
    2. Performance Co-Pilot 서비스를 시작하고 활성화합니다.

       [student@workstation ~]$sudo systemctl enable --now pmcd
       ...output omitted...
      
    3. 백그라운드에서 pmchart 유틸리티를 시작합니다.

       [student@workstation ~]$pmchart &
    4. New Chart(새 차트) 아이콘을 클릭합니다.

    5. Metrics(지표) 탭에서 memfreemem을 선택하고 OK(확인) 버튼을 클릭합니다.

    6. New Chart(새 차트) 아이콘을 다시 클릭합니다.

    7. Metrics(지표) 탭에서 networkinterfaceoutbytesen*X*를 선택하고 OK(확인) 버튼을 클릭합니다.

    8. 선택한 차트를 검토합니다. 사용 가능한 다른 몇 가지 차트를 실험합니다.

    9. PCP 차트 인터페이스를 닫습니다.

      상단 메뉴 표시줄에서 File(파일)Quit(종료)를 클릭합니다.

  8. 터미널 세션의 workstation에서 ssh 명령을 사용하여 serverastudent 사용자로 로그인합니다.

     [student@workstation ~]$ssh student@servera
     ...output omitted...
     [student@servera ~]$
    
  9. http://materials.example.com/labs/perftools-copilot/sampleserver.tgzsampleserver.tgz 아카이브를 servera/home/student 디렉터리로 다운로드합니다. 아카이브를 추출합니다.

    1. 아카이브 파일을 다운로드합니다.

       [student@servera ~]$wget \
       http://materials.example.com/labs/perftools-copilot/sampleserver.tgz
       ...output omitted...
      
    2. 아카이브를 추출합니다.

      [student@servera ~]$tar -xf sampleserver.tgz
  10. sampleserver.log/20150223.12.24.0 아카이브에서 pmval 명령을 사용하여 mem.freemem 성능 지표가 포화 상태 지점 80276을 보고하는 정확한 시간을 확인합니다.

    [student@servera ~]$pmval -a sampleserver.log/20150223.12.24.0 \
    mem.freemem | grep 80276 | head -n 1
    12:29:42.562                80276
    

    mem.freemem 성능 지표는 12:29:42에 80276으로 처음 기록되었습니다.

  11. sampleserver.log 아카이브에 보고된 vda의 최대 디스크 읽기 수를 확인합니다.

    1. 디스크 읽기를 나타낼 수 있는 Performance Co-Pilot 값을 확인합니다.

       [student@servera ~]$pminfo | grep disk | grep read
       disk.dev.read
       disk.dev.blkread
       disk.dev.read_bytes
       disk.dev.read_merge
       disk.dev.read_rawactive
       disk.all.read
       ...output omitted...
      

      몇 개의 값은 가능성이 높아 보입니다. pminfo -dt 명령을 사용하여 가장 적합한 방법을 확인합니다.

       [student@servera ~]$pminfo -dt disk.dev.read
       disk.dev.read [per-disk read operations]
           Data Type: 64-bit unsigned int  InDom: 60.1 0xf000001
           Semantics: counter  Units: count
      
    2. disk.dev.read 성능 지표의 데이터를 통해 vda의 최대 읽기 트랜잭션 수를 쉽게 식별할 수 있습니다.

       [student@servera ~]$pmval -a sampleserver.log/20150223.12.24.0 \
       disk.dev.read | less
       metric:    disk.dev.read
       archive:   sampleserver.log/20150223.12.24.0
       host:      server0.example.com
       start:     Mon Feb 23 12:24:41 2015
       end:       Mon Feb 23 12:54:41 2015
       semantics: cumulative counter (converting to rate)
       units:     count (converting to count / sec)
       samples:   1800
       interval:  1.00 sec
       ...output omitted...
                                  vda                   vdb
       12:25:41.562  No values available
       12:25:42.562               0.0                   0.0
       12:25:43.562               0.0                   0.0
       12:25:44.562               0.0                   0.0
       12:25:45.562               0.0                   0.0
       ...output omitted...
      

      less 명령을 종료하려면 q를 누릅니다.

    3. 출력에서 직접 데이터를 구분하기는 어려우므로, 텍스트 처리 툴을 사용하여 원하는 데이터를 필터링합니다. 데이터 형식을 확인합니다. 질문에 답하는 데 필요한 것은 vda의 2열 데이터뿐입니다.

      프리앰블 정보를 잘라낸 후 두 번째 열의 데이터만 살펴보고 정렬합니다.

       [student@servera ~]$pmval -a sampleserver.log/20150223.12.24.0 \
       disk.dev.read | tail -n +11 | awk '{print $2}' | sort -unr | head
       356.0
       355.0
       353.0
       311.0
       222.0
       221.0
       12.00
       6.000
       5.000
       4.000

      vda의 최대 읽기 트랜잭션 수는 356.0입니다

  12. servera에서 로그아웃합니다.

    [student@servera ~]$exit
    [student@workstation ~]$
    

완료

workstation VM에서 lab perftools-copilot finish 명령을 실행하여 이 연습을 완료합니다. 이 명령은 연습 중에 생성된 리소스를 삭제합니다.

[student@workstation ~]$lab perftools-copilot finish

이로써 안내에 따른 연습이 완료됩니다.

연습 가이드: sysstat 패키지 유틸리티 보기

sysstat 패키지에는 sysstat-collect.timer와 sysstat-collect.service 라는 두개의 systemd unit 을 제공한다. (한글번역본에서는 Unit 을 장치라고 표현함)
이걸 1분마다 한번씩 시스템 활동 데이터를 수집하도록 타이머 장치 구성파일을 수정한다.

이 연습에서는 sysstat 툴 명령의 출력을 분석합니다.

결과

다음을 수행할 수 있습니다.

  • vmstat, mpstat, iostat, pidstat 명령의 출력을 해석합니다.
  • 업데이트된 cron 작업을 사용하여 servera에서 sar을 구성한 다음, 보고서를 생성합니다.

workstation VM에 student로 로그인합니다. 이때 암호는 student를 사용합니다.

lab perftools-sysstat start 명령을 실행하여 안내에 따른 연습 환경을 설정합니다.

[student@workstation ~]$lab perftools-sysstat start

참고

권한 에스컬레이션을 위해 sudo 명령을 사용하도록 지시를 받은 경우 메시지가 표시되면 student를 암호로 사용합니다.

  1. workstation VM에서 두 개의 터미널 창을 나란히 엽니다. 각 터미널에서 ssh 명령을 사용하여 servera에 student 사용자로 로그인합니다.

     [student@workstation ~]$ssh student@servera[student@servera ~]$
  2. 첫 번째 터미널에서 sudo -i 명령을 사용하여 root 사용자 계정으로 전환합니다.

     [student@servera ~]$sudo -i[root@servera ~]#
  3. sysstat 패키지를 설치합니다. sysstat 패키지는 sysstat-collect.timer 및 sysstat-collect.service라는 systemd 장치를 제공합니다. 1분마다 한 번씩 시스템 활동 데이터를 수집하도록 타이머 장치 구성 파일을 수정합니다.

    중요

    /usr/lib/systemd 디렉터리의 파일은 편집하지 마십시오. 대신, 장치 파일을 /etc/systemd/system 디렉터리에 복사하고 해당 복사본을 편집합니다. systemd 프로세스는 먼저 /etc/systemd/system에서 구성 파일을 찾아 사용합니다.

    1. sysstat 패키지를 설치합니다.

       [root@servera ~]#yum install sysstat...output omitted...
    2. /usr/lib/systemd/system/sysstat-collect.timer/etc/systemd/system/sysstat-collect.timer에 복사합니다.

       [root@servera ~]#cp /usr/lib/systemd/system/sysstat-collect.timer \/etc/systemd/system/sysstat-collect.timer
    3. 타이머 장치가 1분마다 한 번씩 실행되도록 /etc/systemd/system/sysstat-collect.timer를 편집합니다.

       [root@servera ~]#vim /etc/systemd/system/sysstat-collect.timer...output omitted...#        Activates activity collector once every minute
      
       [Unit]
       Description=Run system activity accounting tool once every minute
      
       [Timer]
       OnCalendar=*:00/01   -> 이걸 수정한다.
      
       [Install]
       WantedBy=sysstat.service
      
    4. systemctl daemon-reload 명령을 사용하여 systemd에 변경 사항을 알립니다.

       [root@servera ~]#systemctl daemon-reload
    5. systemctl 명령을 사용하여 sysstat-collect.timer 타이머 장치를 활성화합니다.

       [root@servera ~]#systemctl enable --now sysstat-collect.timer
  4. 첫 번째 터미널에서 root 사용자 계정을 종료하여 serverastudent 사용자로 돌아옵니다.

     [root@servera ~]#exit
     logout
     [student@servera ~]$
    
     참고로, 아래처럼 상태 확인하면 나옴
    
     [root@RH442 sa]# systemctl status sysstat-collect.timer
     ● sysstat-collect.timer - Run system activity accounting tool every 1 minutes
        Loaded: loaded (/etc/systemd/system/sysstat-collect.timer; enabled; vendor preset: disabled)
        Active: active (waiting) since Mon 2025-12-08 23:26:01 KST; 20s ago
       Trigger: Mon 2025-12-08 23:27:00 KST; 37s left
    
     Dec 08 23:26:01 RH442 systemd[1]: sysstat-collect.timer: Succeeded.
     Dec 08 23:26:01 RH442 systemd[1]: Stopped Run system activity accounting tool every 1 minutes.
     Dec 08 23:26:01 RH442 systemd[1]: Stopping Run system activity accounting tool every 1 minutes.
     Dec 08 23:26:01 RH442 systemd[1]: Started Run system activity accounting tool **every 1 minutes.**
     [root@RH442 sa]#
    
  5. 업데이트 사이에 1초 지연을 사용하여 vmstat 명령을 실행합니다. 약 10초 동안 실행되도록 합니다. id 열에서 유휴 상태로 유지된 시간의 CPU 백분율을 확인합니다. 출력은 시스템과 명령 실행마다 다릅니다.

     [student@servera ~]$vmstat 1
     procs ... ------cpu-----
      r  b ... us syid wa st
      1  0 ...  3  096 0  0
      0  0 ...  0  0100 0  0
      0  0 ...  0  0100 0  0
     ...output omitted...

    Ctrl+C를 눌러 vmstat 명령을 종료합니다.

  6. /home/student/stress.py 스크립트를 실행하여 부하를 생성한 다음, vmstat를 사용하여 CPU 사용량을 관찰합니다. 더 이상 유휴 상태가 아닌 CPU로 시스템을 100% 활용하려면 어떻게 해야 할까요?

stress 를 사용하기 위해 아래 설치. stress.py가 아닌 stress 커맨드로 하자.

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
yum install epel-release
yum install stress

yum install htop (이것도 epel에서만 받음)

epel 말고 그냥 rhel에서 stress-ng가 있음.

vmstat 명령을 사용하여 보고서를 1초 간격으로 출력합니다.

  1. /home/student/stress.py 스크립트를 백그라운드 프로세스로 실행하고 vmstat 명령을 다시 실행합니다.

     [student@servera ~]$./stress.py &
     [1] 24074
     [student@servera ~]$vmstat 1
      procs ... ------cpu-----
      r  b ...us syid wa st
      4  0 ...  3  0 96  0  0
      1  0 ...50  050  0  0
      1  0 ...50  050  0  0

    이제 유휴 상태로 유지된 시간의 CPU 백분율(id)과 사용자 공간 코드 실행(us)이 약 50%인 것을 확인합니다.

  2. 두 번째 터미널에서 /home/student/stress.py 스크립트를 백그라운드 프로세스로 실행합니다.

  3. 두 터미널에서 stress.py 프로세스를 종료합니다.

     [student@servera ~]$pkill stress.py
     [1]+  Terminated              ./stress.py
  4. /home/student/stress01.py 스크립트를 실행한 다음, vmstatmpstat를 실행하여 CPU 사용량을 확인합니다.

    1. 첫 번째 터미널에서 /home/student/stress01.py 스크립트를 백그라운드 프로세스로 실행합니다.

       [student@servera ~]$./stress01.py &
       [1] 24079
    2. 첫 번째 터미널에서 업데이트 사이에 1초 지연을 사용하여 vmstat 명령을 실행하고 업데이트 4개를 표시합니다.

       [student@servera ~]$vmstat 1 4
       procs ... ------cpu-----
        r  b ... us sy id wa st
       ...output omitted...
    3. 두 번째 터미널에서 업데이트 사이에 1초 지연을 사용하여 mpstat 명령을 실행하고 업데이트 4개를 표시합니다.

       [student@servera ~]$mpstat -P ALL 1 4
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com)  ...  _x86_64_  (2 CPU)
      
       08:35:31 PMCPU%usr   ...%idle...output omitted...
    4. vmstatmpstat 명령의 CPU 지표를 관찰합니다.

      mpstat 명령은 vmstat 명령과 동일한 CPU 사용률 통계를 제공하지만, mpstat는 프로세서별 통계를 표시합니다. 아래의 mpstat 명령 출력에서 stress01.py 프로세스는 사용자 공간 코드를 실행하는 데 사용된 시간의 백분율이 약 100%이므로 CPU0을 처리 작업에 사용합니다. 프로세스가 CPU0에서 실행되고 있다는 팩트는 환경에 따라 다를 수 있습니다.

        procs ... ------cpu-----
        r  b ... us sy id wa st
        3  0 ...  4  0 95  0  0
        1  0 ...50  150  0  0
        1  0 ...50  050  0  0
       ...output omitted...
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com)  ...  _x86_64_  (2 CPU)
      
       ...CPU%usr   ...%idle
       ...all49.75   ...49.75
       ...099.01   ...0.00
       ...10.00   ...100.00...output omitted...
       ...
       ...          CPU    %usr   ...   %idle
       ...          all   50.00   ...   50.00
       ...            0  100.00   ...    0.00
       ...            1    0.00   ...  100.00
      
       Average:     CPU    %usr   ...   %idle
       Average:all49.88   ...49.88
       Average:099.75   ...0.00
       Average:10.00   ...99.75
    5. stress01.py 프로세스를 종료합니다.

       [student@servera ~]$pkill stress01.py
       [1]+  Terminated              ./stress01.py
  5. /home/student/dummy.sh 스크립트를 실행하고, 스크립트를 실행하는 동안 iostat 명령을 사용하여 시스템 동작을 모니터링합니다. 스크립트 코드를 검사하여 어떤 작업을 수행하는지 확인합니다.

    1. 첫 번째 터미널에서 /home/student/dummy.sh 스크립트를 백그라운드 프로세스로 실행합니다.

       [student@servera ~]$./dummy.sh &
       [1] 1276
    2. 업데이트 4개 사이에 각각 1초 지연을 사용하여 iostat 명령을 실행하고 디스크 I/O 통계를 모니터링합니다. y 옵션을 사용하여 시스템 부팅 이후 경과된 시간에 관한 통계를 제공하는 첫 번째 보고서를 무시합니다. 또한 z 옵션을 사용하여 활동이 없는 장치에 대한 출력을 모두 생략합니다.

       [student@servera ~]$iostat -yz 1 4
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU)
      
       avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  0.00    0.00    0.00    0.00    0.00    0.05
      
       Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
       vda             410.00         0.00      1129.00          0       1129
      
       avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  0.00    0.00    1.49    1.49    0.50   96.52
      
       Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
       vda             396.00         0.00      1087.50          0       1087
      
       avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  0.00    0.00    1.51    1.01    0.00   97.49
      
       Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
       vda             404.00         0.00      1112.50          0       1112
      
       avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  0.00    0.00    1.51    1.51    0.50   96.48
      
       Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
       vda             400.00         0.00      1100.00          0       1100

      출력에서 tps, kB_read/s, kB_wrtn/s 열을 관찰합니다. 장치에서 읽은 초당 킬로바이트 단위의 데이터 양은 0으로, 읽기 트랜잭션이 없음을 나타냅니다.

    3. dummy.sh 프로세스를 종료합니다.

       [student@servera ~]$kill -- -$(pgrep dummy.sh)[student@servera ~]$
    4. /home/student/dummy.sh 파일을 열고 스크립트를 검사합니다. 이 스크립트는 100MB 파일을 무한 루프로 작성합니다.

       [student@servera ~]$cat dummy.sh
       #!/bin/bash
      
       # Tell bash to exit after SIGINT
       trap exit INT
      
       # Write a 100MB file every loop
       while true; do
       dd if=/dev/zero of=100MBfile bs=512 count=200000 oflag=dsync
       done
  6. /home/student/stress.py 스크립트를 실행한 다음, pidstat 명령을 실행하여 프로세스의 CPU 사용량을 가져옵니다. 디스크 I/O 통계도 살펴봅니다.

    1. 첫 번째 터미널에서 /home/student/stress.py 스크립트를 백그라운드 프로세스로 실행합니다.

       [student@servera ~]$./stress.py &
       [1] 1578
    2. 두 업데이트 사이에 1초 지연을 사용하여 pidstat 명령을 실행하고 stress.py 프로세스의 CPU 사용량을 모니터링합니다. p 옵션을 사용하여 stress.py 프로세스의 프로세스 ID를 전달합니다.

      pgrep stress.py 명령을 사용하여 프로세스 ID를 검색합니다. 아래 출력에서 프로세스 ID는 1578입니다.

       [student@servera ~]$pgrep stress.py
       1578
       [student@servera ~]$pidstat -p1578 -u 1 2
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ 2 CPU)
      
       ...      UID   PID    %usr %system  %guest   %wait    %CPU   CPU  Command
       ...     1000  1578   99.00    0.00    0.00    0.00   99.00     0  stress.py
       ...     1000  1578  100.00    0.00    0.00    0.00  100.00     0  stress.py
       Average:1000  1578   99.50    0.00    0.00    0.00   99.50     -  stress.py
    3. pidstat -d 명령을 사용하여 디스크 I/O 통계를 살펴보고 stress.py 프로세스에 대한 보고서 2개를 표시합니다.

       [student@servera ~]$pidstat -p1578 -d 1 2
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com) ... _x86_64_ (2 CPU)
      
       ...      UID  PID kB_rd/s kB_wr/s kB_ccwr/s iodelay  Command
       ...     1000 1578    0.00    0.00      0.00       0  stress.py
       ...     1000 1578    0.00    0.00      0.00       0  stress.py
       Average:1000 1578    0.00    0.00      0.00       0  stress.py
    4. stress.py 프로세스를 종료합니다.

       [student@servera ~]$pkill stress.py
       [1]+  Terminated              ./stress.py
  7. 현재 로그 파일의 I/O 및 전송 속도 통계, CPU0 사용률, 네트워크 장치 통계를 보고합니다. 출력은 시스템과 명령 실행마다 다릅니다. 활동 수집기에 데이터를 기록할 수 있는 추가 시간을 허용합니다.

    1. sar -b 명령을 사용하여 현재 로그 파일의 I/O 및 전송 속도 통계를 보고합니다.

       [student@servera ~]$sar -b
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com)  ...  _x86_64_  (2 CPU)
      
       15:50:54     LINUX RESTART  (2 CPU)
      
       03:55:01 PM       tps      rtps      wtps   bread/s   bwrtn/s
       03:56:01 PM      1.65      1.48      0.17    125.64      7.39
       03:57:01 PM    352.26      0.04    352.23      1.19   1937.10
       03:58:01 PM    400.27      0.01    400.26      0.71   2158.94
       03:59:01 PM    406.37      0.00    406.37      0.00   2032.29
       04:00:01 PM    629.46      0.01    629.45      0.24   2817.26
       04:01:01 PM    454.50      0.03    454.48      0.96   2102.45
       04:02:01 PM    415.62      0.01    415.61      0.69   2079.67
       04:03:01 PM      0.03      0.00      0.03      0.00      0.36
       04:04:01 PM      0.26      0.12      0.14     15.19      1.99
       Average:       314.59      0.19    314.40     16.12   1553.52
    2. sar -P 0 명령을 사용하여 현재 로그 파일의 CPU0 사용률을 보고합니다.

       [student@servera ~]$sar -P 0
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com)  ...  _x86_64_  (2 CPU)
      
       15:50:54     LINUX RESTART  (2 CPU)
      
       ...     CPU %user %nice %system %iowait %steal %idle
       ...       0  0.01  0.08    0.03    0.05   0.01 99.83
       ...       0  0.03  0.00    1.59    1.05   0.41 96.92
       ...       0  0.03  0.00    1.67    1.07   0.46 96.77
       ...       0  0.04  0.00    1.69    1.03   0.48 96.76
       ...       0  0.07  0.00    2.29   33.53   0.46 63.65
       ...       0 15.12  0.00    2.09   13.96   0.40 68.43
       ...       0 81.08  0.00    0.95    0.17   0.09 17.71
       ...       0  0.00  0.00    0.01    0.00   0.01 99.99
       ...       0  0.02  0.00    0.04    0.01   0.01 99.93
       Average:  0 11.61  0.01    1.22    5.99   0.27 80.90
    3. sar -n DEV 명령을 사용하여 현재 로그 파일의 네트워크 장치 통계를 보고합니다.

       [student@servera ~]$sar -n DEV
       Linux 4.18.0-80.el8.x86_64 (servera.lab.example.com)  ...  _x86_64_  (2 CPU)
      
       15:50:54     LINUX RESTART  (2 CPU)
      
       ...  IFACE  rxpck/s txpck/s rxkB/s txkB/s rxcmp/s ... %ifutil
       ...     lo     0.00    0.00   0.00   0.00    0.00 ...    0.00
       ... enp1s0     0.91    0.31   0.07   0.05    0.00 ...    0.00
       ...     lo     0.00    0.00   0.00   0.00    0.00 ...    0.00
       ... enp1s0     1.35    0.73   0.11   0.16    0.00 ...    0.00
       ...     lo     0.00    0.00   0.00   0.00    0.00 ...    0.00
       ... enp1s0     1.07    0.53   0.07   0.13    0.00 ...    0.00
       ...output omitted...
       Average:lo     0.00    0.00   0.00   0.00    0.00 ...    0.00
       Average:enp1s0 1.40    0.70   0.11   0.16    0.00 ...    0.00
    4. servera 터미널 세션에서 모두 로그아웃하여 workstationstudent 사용자로 돌아옵니다.

       [student@servera ~]$exit[student@workstation ~]$

완료

workstation VM에서 lab perftools-sysstat finish 명령을 실행하여 이 연습을 완료합니다. 이 명령은 연습 중에 생성된 리소스를 삭제합니다.

[student@workstation ~]$lab perftools-sysstat finish

이로써 안내에 따른 연습이 완료됩니다.

연습 가이드: 시스템 모니터링 툴 식별

이 연습에서는 시스템 모니터링 툴의 출력을 분석합니다.

결과

ps, top, free, lsblk, findmnt, df, du, gnome-system-monitor 명령의 출력을 해석할 수 있어야 합니다.

workstation VM에 student 사용자로 로그인합니다. 이때 암호는 student를 사용합니다.

workstation VM에서 lab perftools-system start 명령을 실행합니다. 이 명령은 네트워크에 있는 servera 호스트에 연결할 수 있는지 여부를 확인합니다. servera에서 명령은 nginx 패키지를 설치하고 서비스를 시작한 다음, /dev/vdb1 파티션을 생성하고 /opt를 마운트합니다.

[student@workstation ~]$lab perftools-system start
  1. workstation VM에서 ssh를 사용하여 serverastudent 사용자로 로그인합니다.

     [student@workstation ~]$ssh student@servera...output omitted...[student@servera ~]$
  2. ps 명령을 사용하여 결과를 기록합니다. 필요한 경우 ps 명령의 도움말 페이지를 참조하십시오.

    1. nginx 서비스와 연결된 프로세스를 나열합니다.

       [student@servera ~]$ps -p $(pidof nginx)
         PID TTY      STAT   TIME COMMAND
        3240 ?        Ss     0:00 nginx: master process /usr/sbin/nginx
        3241 ?        S      0:00 nginx: worker process
        3242 ?        S      0:00 nginx: worker process
    2. 정보를 검색하여 nginx:master 프로세스가 실행된 기간을 확인합니다. 아래 출력에서 3240nginx:master 프로세스의 프로세스 ID입니다.

       [student@servera ~]$ps -p3240 -o etime
           ELAPSED
             01:42
    3. PID, PPID, CMD 열이 포함된 nginx 프로세스 계층 구조를 출력합니다.

       [student@servera ~]$ps --forest -C nginx -o pid,ppid,cmd
         PID  PPID CMD
        3240     1 nginx: master process /usr/sbin/nginx
        3241  3240  \_ nginx: worker process
        3242  3240  \_ nginx: worker process
    4. BSD 스타일을 사용하여 프로세스를 나열하고, RSS(상주 설정 크기)의 내림차순으로 해당 프로세스를 정렬합니다. 출력에는 PID, PPID, RSS, %CPU 열이 표시되어야 합니다.

       [student@servera ~]$ps axo pid,ppid,rss,%cpu --sort=-rss
         PID  PPID   RSS %CPU
         714   685 35164  0.0
         713     1 34332  0.0
         753     1 30164  0.0
       ...output omitted...
    5. student 사용자로 실행 중인 프로세스를 나열합니다.

       [student@servera ~]$ps -U student
         PID TTY          TIME CMD
        5548 ?        00:00:00 systemd
        5742 ?        00:00:00 (sd-pam)
        6027 ?        00:04:07 stress.py
       25299 ?        00:00:00 sshd
       25300 pts/0    00:00:00 bash
       25332 pts/0    00:00:00 ps
  3. top를 사용하여 실행 중인 프로세스 수를 확인하고 결과를 기록합니다. 필요에 따라 창 크기를 조정합니다. 출력을 사용하여 다음 질문에 답하십시오.

    • 프로세스 중 비활성 상태의 프로세스는 몇 개입니까? / 117개 ( sleeping)

    • 실행 가능 상태의 프로세스는 몇 개입니까? / 2개 (running)

    • 좀비 상태의 프로세스는 몇 개입니까? / 0개 (zombie)

    • 중지 상태의 프로세스는 몇 개입니까? / 0개 (stopped)

      [student@servera ~]$top
      top - 16:45:15 up 40 min,  1 user,  load average: 0.23, 0.06, 0.02
      Tasks: 119 total,   2 running, 117 sleeping,   0 stopped,   0 zombie...output omitted...
    • top** 명령을 종료하지 *마십시오.

      각 항목별 설명

      us (user) : 위 값에서는 0.1
      사용자 영역에서 실행중인 프로세스가 cpu를 사용하는 시간 비율
      일반 애플리케이션 (웹서버, 디비서버 등)이 포함됨

      sy (system) : 위 값에서는 0.2
      커널 영역에서 실행중인 프로세스가 cpu를 사용하는 시간의 비율
      시스템 콜, 장치 드라이버, 네트워크 스택 등이 포함됨

      ni (nice) : 위 값에서는 0.0
      우선순위가 조정된 (nice 값이 설정된) 사용자 프로세스가 cpu를 사용하는 시간의 비율.
      nice 는 프로세스 우선순위를 낮추거나 높이는데 사용되며, 일반적으로 백그라운드 작업에서사용됨

      id (idle) : 위 값에서는 98.6
      CPU가 유휴 상태로 대기하는 시간의 비율

      wa (I/O wait) : 위 값에서는 0.0
      cpu가 i/o 작업 (디스크 또는 네트워크와 같은 장치로의 입출력)을 기다리는 시간의 비율

      hi (hardware interrupt) : 위 값에서는 0.1
      cpu가 하드웨어 인터럽트를 처리하는데 사용된 시간의 비율
      키보드, 마우스, 네트워크 카드 등 하드웨어에서 발생함

      si (software interrupt) : 위 값에서는 0.2
      cpurk 소프트웨어 인터럽트를 처리하는데 사용된 시간의 비율
      시스템 콜, 소프트웨어 이벤트 등에서 발생함

      st (steal time): 위 값에서는 0.9
      가상화 환경에서 다른 가상 머신이 cpu를 쓰느라 현재 vm이 대기해야 하는 시간의 비율

    • 여기서 나오는 us, sy, ni, id, wa, hi, si, st는 다 합쳐서 100이 나와야 하는데 아닌경우가 있음.

    • 이는 각 표시된 값들이 반올림된 결과라서 소수점 오차로 인해 합이 100%을 넘으 수 있음.

  4. top을 사용하여 사용자 및 커널 프로세스의 CPU 사용량을 시간 백분율로 기록합니다.

     top - 16:45:15 up 40 min,  1 user,  load average: 0.23, 0.06, 0.02
     Tasks: 119 total,   2 running, 117 sleeping,   0 stopped,   0 zombie
     %Cpu(s):50.0 us,0.0 sy,  0.0 ni, 50.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
     ...output omitted...

    top 명령을 종료하지 마십시오.

  5. top을 사용하여 가장 많은 실제 메모리를 사용하는 프로세스를 찾아서 종료합니다.

    1. Shift+R을 눌러 RES(상주 크기)를 기준으로 프로세스를 정렬합니다. 프로세스의 PID 열에 나열된 프로세스 ID를 기록합니다.

       PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
       24895 student   20   0  234608   7676   4856 R  99.7   0.4   9:06.90 stress.py
       24900 student   20   0  273596   4404   3748 R   0.3  99.7   9:06.89 top
       ...output omitted...
    2. top 인터페이스 내에서 k를 눌러 종료할 PID를 입력하라는 메시지를 표시합니다. 헤더 아래와 열 위의 프롬프트를 관찰합니다. 프롬프트가 목록의 맨 위에 있는 stress.py 프로세스의 PID로 기본 설정되어 있는지 확인합니다. 그렇지 않은 경우 프롬프트에 stress.py 프로세스의 PID를 입력합니다. Enter를 눌러 프로세스를 강제 종료합니다.

       ...output omitted...
       PID to signal/kill [default pid = 24895]

      Enter를 다시 눌러 SIGTERM 신호 15를 확인합니다.

       ...output omitted...
       Send pid 24895 signal [15/sigterm]

      top 명령을 종료하려면 q를 누릅니다.

  6. /dev/vdb1 디스크를 채우는 파일을 식별합니다.

    1. lsblk -fp를 사용하여 /dev/vdb1의 UUID, 파일 시스템, 마운트 지점을 나열합니다.

       [student@servera ~]$lsblk -fp /dev/vdb
       NAME        FSTYPE LABEL UUID                                 MOUNTPOINT
       /dev/vdb
       └─/dev/vdb1 xfs          18ea1c7c-b236-4009-9678-874c29781edc /opt
    2. findmnt 명령을 사용하여 /opt 디렉터리가 /dev/vdb1에 마운트되어 있는 것과 이 디렉터리의 마운트 옵션을 확인합니다.

       [student@servera ~]$findmnt -S /dev/vdb1
       TARGET SOURCE    FSTYPE OPTIONS
       /opt   /dev/vdb1 xfs    rw,relatime,seclabel,attr2,inode64,noquota
    3. df -h 명령을 사용하여 /opt에 사용 가능한 디스크 공간을 GB 단위로 표시합니다.

       [student@servera ~]$df -h /opt
       Filesystem      Size  Used Avail Use% Mounted on
       /dev/vdb1       5.0G  5.0G   47M 100% /opt
    4. du -h 명령을 사용하여 디스크가 꽉 차게 하는 파일을 식별합니다. sudo를 사용하여 파일을 삭제하고, 메시지가 표시되면 student를 암호로 입력합니다.

       [student@servera ~]$du -h /opt/*
       4.9G  /opt/largefile
       [student@servera ~]$sudo rm /opt/largefile
       [sudo] password for student:student[student@servera ~]$
    5. servera에서 로그아웃합니다.

       [student@servera ~]$exit
       logout
       Connection to servera closed.
       [student@workstation ~]$
  7. workstation에서 gnome-system-monitor를 사용하여 CPU 사용량 동작을 관찰합니다. 열려 있는 프로세스 파일을 찾아서 살펴봅니다.

    1. workstation에서 sha1sum /dev/zero & 명령 인스턴스를 두 개 시작합니다.

       [student@workstation ~]$for i in $(seq 1 2); \do sha1sum /dev/zero & done
       [1] 14053
       [2] 14054
    2. 터미널을 사용하여 gnome-system-monitor 유틸리티를 엽니다.

       [student@workstation ~]$gnome-system-monitor
    3. gnome-system-monitor에서 Resources(리소스) 탭을 클릭하여 CPU 사용량을 살펴봅니다. CPU1과 CPU2 모두 100%입니다.

    4. Processes(프로세스) 탭에서 search(검색) 버튼을 사용하여 sha1sum 프로세스를 찾습니다.

      첫 번째 프로세스를 마우스 오른쪽 버튼으로 클릭하고 Stop(중지)을 선택합니다. Stop Process(프로세스 중지)를 클릭하여 확인합니다.

      Resources(리소스) 탭을 클릭하여 CPU 사용량을 살펴봅니다. 한 CPU의 CPU 사용량이 감소했습니다.

    5. Processes(프로세스) 탭으로 돌아가서 두 프로세스 중 하나를 마우스 오른쪽 버튼으로 클릭하고 Open Files(파일 열기)를 선택합니다. 프로세스에서 사용하는 파일을 살펴본 다음 창을 닫습니다.

    6. 마우스 오른쪽 버튼을 클릭하고 Memory Maps(메모리 맵)를 엽니다. 열려 있는 파일을 살펴본 다음 창을 닫습니다.

    7. sha1sum 프로세스를 모두 종료합니다. 프로세스를 마우스 오른쪽 버튼으로 클릭하고 Kill(종료)을 선택합니다. Kill Process(프로세스 종료)를 클릭하여 확인합니다.

      gnome-system-monitor 유틸리티를 닫습니다.

완료

workstation VM에서 lab perftools-system finish 명령을 실행하여 이 연습을 완료합니다. 이 명령은 연습 중에 생성된 리소스를 삭제합니다.

[student@workstation ~]$lab perftools-system finish

이로써 안내에 따른 연습이 완료됩니다.

Performance Co-Pilot을 통한 성능 데이터 수집

RHEL8에는 시스템 수준의 성능 측적값을 모니터링/시각화/저장/분석 하기 위한 툴,서비스, 라이브러리 베품군인 PCP (Performance Co-Pilot) 가 포함된다.

경량 분산 아키텍쳐를 사용하며 로컬 및 원격 호스트의 중앙 집중식 분석에 이상적임

모든 PCP 툴이 원격으로 실행될 수 있어 분산형이다.

모니터링되는 호스트(들)에서 커널,서비스계층,웹서버등을 비롯한 성능 지표의 각 도메인에는 해당 도메인의 성능 측정값 수집을 책임지는 PMDA (Performanage measure domain agaent)가 필요하다.
모든 PDMA는 동일한 호스트의 PMCD(Performance measure Collector daemon) 을 통해 제어된다.

pcp 툴과 레거시 툴은 서로 기능이 거의 일대일로 일치한다.
pcp의 장점은 레거시 툴과 유사한 기능을 유지하면서 많은 최신 툴과 함께 사용할 수 있는 범용 스토리지 구조를 이용한다는 것이다.

PCP는 아래를 위한 프레임워크를 제공

  • 실시간 데이터 모니터링 및 관리
  • 기록데이터의 로깅 및 검색

PCP 및 관련 패키지 설치하기

pcp 패키지는 pmcd 수집기 데몬, pcp 명령, 하위 명령 및 기본 툴과 라이브러리를 제공

pcp-gui 패키지는 로컬 및 원격 성능 지표의 그래픽 데이터를 생성하는 pmchart 명령 등의 추가 유틸리티가 포함되며 또한 pcp 그래픽 뷰를 생성할 수 있다.

추가 시스템 모니터링 툴 pcp-system-tools 패키지는 pcp 명령에 인수로 전달되는 확장된 pcp 툴과 하위 명령 세트를 제공한다. 이 패키지에는 iostat, pidstat, free 등과 같은 레거시 명령의 pcp 버전이 포함되어 있다. 그래서 pcp free 이런식으로 명령을 칠 수 있음.

 

 

PCP 시작 및 활성화하기

PCP는 PMCD 데몬 수집기를 사용하여 시스템의 성능 지표를 수집한다.
PCP에 성능 지표를 제공하는 모든 시스템에 PMCD 인스턴스가 실행되고 있어야 한다.
systemctl enable --now pmcd

기본적으로 pcp 명령으로 퍼포먼스 코파일럿 구성 정보를 요약해서 확인한다.

[student@servera ~]$ pcp
Performance Co-Pilot configuration on servera.lab.example.com:

 platform: Linux servera.lab.example.com 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64
 hardware: 2 cpus, 4 disks, 1 node, 1829MB RAM
 timezone: CDT+5
 services: pmcd
     pmcd: Version 4.3.0-1, 8 agents
     pmda: root pmcd proc xfs linux mmv kvm jbd2

 

 

평소 쓰던 명령 앞에 pcp를 붙인다.

 

pcp free

pcp free랑 free 랑 수치가 좀 다른데, pcp free 명령은 커널이 사용하는 캐시 뿐만이 아니라 시스템에서 사용가능하거나 사용한 실제 메모리와 스왑의 총 용량을 요약해서 제공한다.

 

pcp dstat

vda 같은 디스크 사용량과 관련된 자세한 정보를 표시한다.

pcp dstat 명령은 일반적인 성능 분석 툴로 사용된다. 이 명령을 쓰면 동일한 간격으로 여러 시스템 리소스를 볼 수 있다.
예를 들어 디스크 사용량을 디스크 컨트롤러의 인터럽트와 결합해서 비교하거나 네트워크 대역폭 수치를 디스크 처리량과 직접 비교할 수 있다.

 

 

dd 명령을 백그라운드로 수행하여, diskreads라는 파일에 대해 쓰기 를 생성한다.

그동안 pcp dstat을 사용하여 1초마다 데이터를 수집하고 출력을 10회 반복하고 타임스탬프 및 디스크 통계를 표시한다.

[student@servera ~]$ dd if=/dev/zero of=diskreads bs=512 \
count=2M oflag=dsync &

[student@servera ~]$ pcp dstat --nocolor -tdD vda 1 10
----system---- --dsk/vda--
     time     | read  writ
28-06 08:10:52|
28-06 08:10:53|   0   111M
28-06 08:10:54|   0   128M
28-06 08:10:55|   0   112M
28-06 08:10:56|   0   112M
28-06 08:10:57|   0   111M
28-06 08:10:58|   0     0
28-06 08:10:59|   0     0
28-06 08:11:00|1838k    0
28-06 08:11:01|   0    10k

kill $(pidof dd) 명령을 사용하여 dd 명령을 종료합니다.

[student@servera ~]$kill $(pidof dd)
[student@servera ~]$

 

 

 

pcp dstat 명령에 인수를 제공하지 않으면 기본 옵션인 -cdngy가 사용된다.
기본옵션은 각각 --cpu, --disk, --net, --page, --sys에 해당한다.

추가로 다른 옵션은 각 줄에 타임스탬프 추가, 각 업데이트 사이에 지연 추가, 표시할 업데이트 수 등이 있다.

  • -time : 타임스탬프 추가
  • 2 8 : 2초마다 8번
  • --proc : cpu 프로세스 통계 보고

 

 

 

pmstat 명령은 vmstat 과 유사한 정보를 제공한다. vmstat과 pmstat 둘다 수집 간격 (-t)와 샘플 수 (-s) 를 조정하는 옵션이 있다.
-t 1은 1초마다, -t 3은 3초마다.

 

 

1분 부하 평균, 스와핑 통계, 시스템 인터럽트 비율 및 컨텍스트 전환, CPU 사용자 코드, 시스템 및 인터럽트 처리 코드, 유휴 루프 통계를 캡쳐할 수 있다.

루프 구조로 sha1sum /dev/zero & 명령 인스턴스 4개를 실행하여 시스템에 워크로드를 적용한 다음, pmstat 명령을 실행합니다. 약 15회 반복하면서 값의 변화를 관찰합니다. PID 및 통계 값은 명령을 실행할 때마다 달라집니다.

[student@servera ~]$ for i in $(seq 1 4); do sha1sum /dev/zero & done
[1] 2154
[2] 2155
[3] 2156
[4] 2157

[student@servera ~]$ pmstat
@ Sun Jun 30 15:54:33 2019
 loadavg                  memory    swap      io     system         cpu
   1 min swpd   free buff  cache  pi  po  bi  bo    in   cs  us  sy  id
    0.70    0  1229m 2104 364200   0   0   0   0  2017  307  95   5   0
    0.96    0  1229m 2104 364200   0   0   0   0  2016  305  96   4   0
    1.20    0  1229m 2104 364200   0   0   0   0  2014  304  95   5   0
    1.59    0  1229m 2104 364200   0   0   0   0  2015  307  95   5   0
    1.94    0  1229m 2104 364200   0   0   0   0  2013  306  95   5   0
    2.11    0  1220m 2104 364220   0   0   0   0  2069  404  95   5   0
    2.34    0  1228m 2104 364212   0   0   0  27  2099  458  95   5   0
    2.55    0  1228m 2104 364212   0   0   0   0  2014  304  96   4   0
    2.67    0  1228m 2104 364212   0   0   0   0  2013  303  96   4   0
    2.78    0  1228m 2104 364212   0   0   0   0  2015  304  95   5   0
    2.87    0  1228m 2104 364212   0   0   0   0  2013  304  95   5   0
    2.96    0  1228m 2104 364212   0   0   0   0  2015  299  96   4   0
    3.05    0  1228m 2104 364212   0   0   0  18  2015  308  95   5   0
    3.12    0  1228m 2104 364212   0   0   0   0  2016  306  95   5   0
    3.19    0  1228m 2104 364212   0   0   0   0  2014  306  95   5   0
...output omitted...

ctrl+c로 pmstat을 종료한다.

아래 명령어로 sha1sum /dev/zero 명령 인스턴스를 모두 종료한다.

[student@servera ~]$pkill sha1sum
[2]   Terminated              sha1sum /dev/zero
[3]-  Terminated              sha1sum /dev/zero
[1]-  Terminated              sha1sum /dev/zero
[4]+  Terminated              sha1sum /dev/zero

 

 

 

 

 

performance co-pilot에는 개별적으로 추적되는 지표를 쿼리하는 텍스트 기반 메커니즘이 있다.
저장된 지표 목록을 가져올 때 pminfo 명령 사용
관련 데이터를 수집하려면 메트릭과 함께 pmval 명령을 사용한다.

아래처럼 리스트 쭉 나옴

 

하나 찍어서 볼 수 있음. dt 명령은 뭘까?

 

 

대문자 T옵션으로 상세 설명 확인 가능. 근데 dt가 더 나을지도? pminfo -h 에서 자세히 보자.

 

 

pminfo 에서 “사용가능한 메모리”를 추적하는 성능지표를 찾는다. 찾은 후에는 해당 설명을 표시하고 간격당 15초 속도로 샘플 출력 5개를 수집합니다.

[student@servera ~]$pminfo | grep free
mem.freemem
...output omitted...

[student@servera ~]$ pminfo -dt mem.freemem
mem.freemem
    Data Type: 64-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
    Semantics: instant  Units: Kbyte

통계 값은 명령 실행할때마다 달라진다.

[student@servera ~]$pmval -t 15 -s 5 mem.freemem
metric:    mem.freemem
host:      servera.lab.example.com
semantics: instantaneous value
units:     Kbyte
samples:   5
interval:  15.00 sec
              1261872
              1261904
              1261904
              1261904
              1261936

 

 

 

pmval -s 5 proc.nprocs 여기서 -s 5는 샘플 다섯개

 

그래픽 유틸리티를 사용하여 성능 지표 데이터 그리기

pcp-gui 패키지는 여러 라이브 호스트에서 소싱된 성능 지표 값을 그리는 pmchart 그래픽 유틸리티를 제공한다.
로컬 및 원격 호스트를 동일한 뷰에서 표시할 수 있다. 하나 이상의 pcp 아카이브 세트를 기록데이터의 소스로 사용할 수 있다.
pmchart 명령은 라이브 데이터 및 다른시스템의 데이터를 그래프로 그리고 보관된 데이터 파일의 데이터를 재생할 수 있음.

 

 

실행하면 아래와 같이 뜬다. 아직 차트가 구성되지 않은 것임

 

 

차트 추가하려면 FILE -> NEW CHART 선택
이런식으로 나옴

 

 

이런식으로 여러가지 체크해서 만들 수 있다.

 

 

아래 사진은 MEM 부분은 적용 안한것임.

 

이런식으로 여러가지 체크해서 만들 수 있다.
관리자는 동일한 pmchart 창에 표시할 여러 그래프를 구성할 수 있음.
pmchart 의 그래프 데이터는 1초마다 업데이트되며, 각 독립 그래프에서 간격을 수정할 수 있다.

예시

  1. 백그라운드에서 pmchart 유틸리티를 시작합니다.
  2. [student@workstation ~]$pmchart &
  3. New Chart(새 차트) 아이콘을 클릭합니다.
  4. Metrics(지표) 탭에서 memfreemem을 선택하고 OK(확인) 버튼을 클릭합니다.
  5. New Chart(새 차트) 아이콘을 다시 클릭합니다.
  6. Metrics(지표) 탭에서 networkinterfaceoutbytesen*X*를 선택하고 OK(확인) 버튼을 클릭합니다.
  7. 선택한 차트를 검토합니다. 사용 가능한 다른 몇 가지 차트를 실험합니다.
  8. PCP 차트 인터페이스를 닫습니다.
  9. 상단 메뉴 표시줄에서 File(파일)Quit(종료)를 클릭합니다.

 

pcp 차트를 사용하여 원격 호스트 액세스

원격 호스트의 성능 지표에 액세스하려면 다음을 수행합니다.

  • 로컬 및 원격 호스트에 pcp 패키지를 설치합니다.
  • 각 원격 호스트의 44321/tcp 포트에 대한 액세스 권한을 부여합니다.
  • 로컬 및 원격 호스트에서 pmcd 데몬을 시작하고 활성화합니다.
  • 시스템 모니터링 툴이 필요한 모든 호스트에 pcp-system-tools 패키지를 설치합니다.

기본적으로 pmchart는 로클 호스트 pmcd 데몬에 연결한다.

원격 호스트에 연결하려면 pmchart 명령에 호스트명을 지정한다.

아래는 로컬 호스트에서 remotehost의 pmcd 데몬으로의 연결을 연다.

[user@host ~]$ pmchart -h remotehost

또는 실행 중인 PCP 차트 인터페이스에 올바르게 구성된 원격 호스트를 추가할 수 있습니다.

  • PCP Charts(PCP 차트) 인터페이스에서 Edit(편집) 메뉴를 클릭하고 Preferences(기본 설정)...를 선택합니다.
  • Edit(편집) 메뉴를 열고 Preferences(기본 설정)...를 선택합니다.
  • Settings(설정) 인터페이스에서 Hosts(호스트) 탭을 클릭합니다.
  • Add Host Computer(호스트 컴퓨터 추가) 아이콘을 클릭합니다.
  • Hostname(호스트 이름): 필드에 원격 호스트 이름을 입력합니다. OK(확인) 버튼, Close(닫기) 버튼을 차례로 클릭합니다.
  • 추가 호스트를 확인하려면 PCP Charts(PCP 차트) 인터페이스에서 New Chart(새 차트) 아이콘을 클릭합니다. Metrics(지표) 탭을 클릭하여 해당 호스트의 pmcd 데몬에 연결된 호스트 목록을 표시합니다.

로그에서 데이터 재생하기

pcp에는 pmlogger 명령으로 데이터를 로그에 저장하는 기능도 있다.
기본적으로 pmlogger 명령은 로깅된 데이터를 /var/log/pcp/pmlogger/HOSTNAME 에 저장한다.

pmlogger 아카이브에 데이터를 수집하고 나서는 pmval, pmchart 같은 툴로 선택한 성능지표를 기준으로 데이터를 쿼리 및 처리한다.
pmlogger 명령은 pcp 초기화 스크립트에서 데몬으로 시작될 수 있다. (데몬으로 시작됨) pmlogger는 기본적으로 1초마다 데이터를 수집한다. pmlogger는 데몬이다.

 

pmlogger 명령은 pcp 초기화 스크립트에서 데몬으로 시작될 수 있습니다. 수동으로 명령을 시작할 수도 있습니다.

[user@host ~]$ pmlogger /var/log/pcp/pmlogger/host.example.com

 

로그파일은 ISO 형식 날짜로 시작된다. 로그 파일 외에도 메타데이터 및 인덱스 정보를 저장하기 위해 여러 파일이 생성된다.

 

pmdumplog 명령으로 성능 지표 아카이브 로그의 내부 세부 정보를 본다.

-Z EST+5 옵션은 타임스탬프가 아카이브의 타임스탬프와 동일한 형식으로 표시되어 근본적으로 로컬 시스템의 표준 시간대를 재정의하도록 한다.

 

Z 옵션 없으면 타임존 얘기 안나옴.

 

 

참고 : 로그를 다른 시스템에 보낼때는 로그 파일 및 관련 .meta 파일을 복사한다. 파일 누락이 있으면 분석툴에서 로그를 못읽는다.

 

로그가 생성되어 있으면, pcp 명령 쓸때 -a 옵션 사용하여 라이브 데이터가 아닌 아카이브 데이터를 열 수 있다.
pmval, pmchart 명령에는 데이터를 특정 시간 범위로 좁히는데 사용해야 하는 시작 및 종료 시간을 지정하는 추가 옵션이 있다.

 

pmval -a 파일명 속성명

[user@host ~]$ pmval -a /var/log/pcp/pmlogger/host.example.com/20150224.00.10.0 kernel.all.load
...output omitted...
03:03:46.197       0.1100        0.1700        0.1200
03:03:47.197       0.1100        0.1700        0.1200
03:03:48.197       0.1100        0.1700        0.1200
03:03:49.197       0.1100        0.1700        0.1200
...output omitted...

 

 

pmval에서 아래와 같이 옵션을 사용하여 특정 기간을 지정할 수 있다. 날짜 값은 date의 결과와 비슷하므로 그걸 따라하면 된다. 아래는 2025년 2월 18일 23:30:00부터 23:31:00까지의 기록을 확인하는것이다.

 

 

pmval 명령을 사용하여 2019년 7월 7일 03:03:00부터 03:04:00까지의 부하 평균을 살펴봅니다.

[user@host ~]$ pmval -a /var/log/pcp/pmlogger/host.example.com/20190707.00.10.0 kernel.all.load -S '@ Sun Jul 07 03:03:00 2019' -T '@ Sun Jul 07 03:04:00 2019'
metric:    kernel.all.load
archive:   /var/log/pcp/pmlogger/host.example.com/20190707.00.10.0
host:      host.example.com
start:     Sun Jul 07 03:03:00 2019
end:       Sun Jul 07 03:04:00 2019
semantics: instantaneous value
units:     none
samples:   61
interval:  1.00 sec

                 1 minute      5 minute     15 minute
03:03:00.000       0.3000        0.2100        0.1200
03:03:01.000       0.3000        0.2100        0.1200
03:03:02.000       0.3000        0.2100        0.1200
...output omitted...

대체(alternate) 시간 사양(specification)은 PCPIntro(1) 도움말 페이지에서 확인할 수 있습니다.

References

pmstat(1), pmcollectl(1), pmatop(1), pminfo(1), pmval(1) 및 pmchart(1) 도움말 페이지

PCP(Performance Co-Pilot) 데이터시트

레거시 툴과 PCP 툴 나란히 비교

sysstat와 PCP(Performance Co-Pilot) 비교

PCP(Performance Co-Pilot) 문서, 솔루션, 자습서, 백서 인덱스

'Performance Tuning > RH442 본문' 카테고리의 다른 글

2장 - 시스템 활동 보고서 Sar  (0) 2026.03.02
2장 - 시스템 모니터링 툴  (0) 2026.03.02
1장 - 성능 튜닝 소개  (0) 2026.03.02
소개 - 강의실 환경  (0) 2025.02.10

시스템 활동 보고서 sar

  • 현재 시스템 활동을 모니터링, 기록통계보관, 보고하도록 구성
  • sar은 커널 카운터에서 지표를 수집한다.
  • 예약된 시간에 실행되어 시스템 활동을 기록하는 에이전트가 있다.
  • sar 명령을 사용하여 시스템 상태에 대한 순간 데이터를 수집할 수도 있다.

sysstat 구성파일

  • /etc/sysconfig/sysstat 에서 여러 옵션을 확인할 수 있다.
  • 예를들어, history 변수를 변경하여 sar 명령을 통해 아카이브가 유지되는 일수를 변경할 수 있다.
[root@RH442 system]# cat /etc/sysconfig/sysstat
# sysstat-11.7.3 configuration file.

# How long to keep log files (in days).
# If value is greater than 28, then use sadc's option -D to prevent older
# data files from being overwritten. See sadc(8) and sysstat(5) manual pages.
HISTORY=28

# Compress (using xz, gzip or bzip2) sa and sar files older than (in days):
COMPRESSAFTER=31

# Parameters for the system activity data collector (see sadc manual page)
# which are used for the generation of log files.
SADC_OPTIONS=" -S DISK"

# Directory where sa and sar files are saved. The directory must exist.
SA_DIR=/var/log/sa

# Compression program to use.
ZIP="xz"

# By default sa2 script generates yesterday's summary, since the cron job
# usually runs right after midnight. If you want sa2 to generate the summary
# of the same day (for example when cron job runs at 23:53) set this variable.
#YESTERDAY=no

# By default sa2 script generates reports files (the so called sarDD files).
# Set this variable to false to disable reports generation.
#REPORTS=false
[root@RH442 system]#

대화형 sar 사용

  • sar 명령은 기본적으로 cpu 사용율 보고서를 생성한다. sar 명령에 interval count 를 넣는다.

 

옵션

  • -o 파일명 : 지표를 저장할 출력파일과 콘솔에 동시에 데이터를 쓴다.
  • -B : 메모리 페이징 통계
[root@RH442 system]# sar -B 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:29:23 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
01:29:24 AM      0.00      0.00      0.00      0.00      1.00      0.00      0.00      0.00      0.00
01:29:25 AM      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:26 AM      0.00      0.00      0.00      0.00      1.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.67      0.00      0.00      0.00      0.00
[root@RH442 system]#
  • -b : 모든 장치에 대한 I/O 및 전송 통계
[root@RH442 system]# sar -b 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:29:32 AM       tps      rtps      wtps   bread/s   bwrtn/s
01:29:33 AM      0.00      0.00      0.00      0.00      0.00
01:29:34 AM      0.00      0.00      0.00      0.00      0.00
01:29:35 AM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00
[root@RH442 system]#
  • -d : 각 블록 장치에 대한 디스크 I/O 통계
[root@RH442 system]# sar -d 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:29:38 AM       DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
01:29:39 AM  dev259-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:39 AM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:39 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:39 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

01:29:39 AM       DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
01:29:40 AM  dev259-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:40 AM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:40 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:40 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

01:29:40 AM       DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
01:29:41 AM  dev259-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:41 AM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:41 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
01:29:41 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps     rkB/s     wkB/s   areq-sz    aqu-sz     await     svctm     %util
Average:     dev259-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
[root@RH442 system]#
  • -n : 네트워크 통계 (여러가지 지정해야 하는 항목이 있음, sar —help 에서 확인 가능)
        -n { <keyword> [,...] | ALL }
                Network statistics [A_NET_...]
                Keywords are:
                DEV     Network interfaces
                EDEV    Network interfaces (errors)
                NFS     NFS client
                NFSD    NFS server
                SOCK    Sockets (v4)
                IP      IP traffic      (v4)
                EIP     IP traffic      (v4) (errors)
                ICMP    ICMP traffic    (v4)
                EICMP   ICMP traffic    (v4) (errors)
                TCP     TCP traffic     (v4)
                ETCP    TCP traffic     (v4) (errors)
                UDP     UDP traffic     (v4)
                SOCK6   Sockets (v6)
                IP6     IP traffic      (v6)
                EIP6    IP traffic      (v6) (errors)
                ICMP6   ICMP traffic    (v6)
                EICMP6  ICMP traffic    (v6) (errors)
                UDP6    UDP traffic     (v6)
                FC      Fibre channel HBAs
                SOFT    Software-based network processing

[root@RH442 system]# sar -n IP 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:30:08 AM    irec/s  fwddgm/s    idel/s     orq/s   asmrq/s   asmok/s  fragok/s fragcrt/s
01:30:09 AM     11.00      0.00      1.00      1.00      0.00      0.00      0.00      0.00
01:30:10 AM      7.00      0.00      1.00      1.00      0.00      0.00      0.00      0.00
01:30:11 AM      6.00      0.00      1.00      1.00      0.00      0.00      0.00      0.00
Average:         8.00      0.00      1.00      1.00      0.00      0.00      0.00      0.00
[root@RH442 system]#
  • -r : 메모리 사용율 통계
[root@RH442 system]# sar -r 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:33:13 AM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
01:33:14 AM 1040135832 1037564380  15654216      1.48      4852    589204   2086648      0.20    295160    526732         0
01:33:15 AM 1040135804 1037564352  15654244      1.48      4852    589204   2086648      0.20    295160    526736         0
01:33:16 AM 1040135804 1037564352  15654244      1.48      4852    589204   2086648      0.20    295160    526740         0
Average:    1040135813 1037564361  15654235      1.48      4852    589204   2086648      0.20    295160    526736         0
[root@RH442 system]#
  • -q : 대기열 길이 및 부하
[root@RH442 system]# sar -q 1 3
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:34:17 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
01:34:18 AM         0      1500      0.00      0.00      0.00         0
01:34:19 AM         0      1500      0.00      0.00      0.00         0
01:34:20 AM         0      1500      0.00      0.00      0.00         0
Average:            0      1500      0.00      0.00      0.00         0
[root@RH442 system]#

이미 생성된 로그 파일 읽기

  • 이미 생성된 파일은 /var/log/sa/saDD 이런식으로 생성되어 있다.
  • -f 옵션으로 읽기를 수행할 수 있고, 위에 있는 각 항목별 옵션을 추가해서 해당 항목을 읽기할 수 있다.
[root@RH442 system]# sar -r -f /var/log/sa/sa28
Linux 4.18.0-553.el8_10.x86_64 (RH442)  11/28/2025      _x86_64_        (128 CPU)

01:10:59     LINUX RESTART      (128 CPU)

01:20:35 AM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
01:30:11 AM 1040135972 1037564624  15654076      1.48      4852    589184   2119472      0.20    295152    526620         0
Average:    1040135972 1037564624  15654076      1.48      4852    589184   2119472      0.20    295152    526620         0
[root@RH442 system]#

 

 

P 0 옵션은 0번 cpu 만 보는거. P ALL 은 모든 씨피유 보는거

 

 

네트워크 장치 통계 보기

 

 

 

비대화형 sar 사용

  • cron 을 통해 데이터를 수집하여 예약된 시간에 에이전트가 실행되도록 한다.
  • 두가지 파일이 있다. /usr/lib64/sa/sa1, sa2
  • sa1 스크립트 : /usr/lib64/sa/sadc를 호출하여 1초 측정 간격 동안 데이터를 수집한다.
  • sa2 스크립트 : 일일 보고서를 /var/log/sa/saDD 또는 saYYYYMMDD 파일에 작성한다.
  • systemctl status sysstat 서비스를 실행해야 한다.
  • sysstat 서비스는 현재 일일 데이터 파일에 더미 레코드를 삽입하여 카운터가 재설정된 시간을 표시함으로써 모든 메트릭 카운터를 0으로 설정한다.

 

SAR 구성 2가지

 

crontab

  • 사용자는 /usr/lib64/sa/sa1 및 /usr/lib64/sa/sa2 명령을 실행하는 예약된 작업을 /etc/cron.d/sysstat 파일에서 아래와 같이 구성한다. (없는파일임 직접 만들어야함)
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

sysstat-timer

  • /etc 에서 crontab, cron.d, cron.weekly 등에서 찾을수 없다면 systemd timer로 실행시키고 있는 것임.
[root@RH442 system]# systemctl list-timers | grep sysstat
Fri 2025-11-28 01:20:00 KST  2min 9s left n/a                          n/a          sysstat-collect.timer        sysstat-collect.service
Sat 2025-11-29 00:07:00 KST  22h left     n/a                          n/a          sysstat-summary.timer        sysstat-summary.service
  • sysstat-collector.service는 sa1을 수행하며, sysstat-osummary.service는 sa2를 수행한다.
[root@RH442 system]# cat sysstat-collect.service
# /usr/lib/systemd/system/sysstat-collect.service
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
#        Collects system activity data
#        Activated by sysstat-collect.timer unit

[Unit]
Description=system activity accounting tool
Documentation=man:sa1(8)
After=sysstat.service

[Service]
Type=oneshot
User=root
ExecStart=/usr/lib64/sa/sa1 1 1

[root@RH442 system]# 

=============================================================================

[root@RH442 system]# cat sysstat-summary.service
# /usr/lib/systemd/system/sysstat-summary.service
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
#        Generates daily summary of process accounting

[Unit]
Description=Generate a daily summary of process accounting
Documentation=man:sa2(8)
After=sysstat.service

[Service]
Type=oneshot
User=root
ExecStart=/usr/lib64/sa/sa2 -A
[root@RH442 system]#
  • 위 내용은 기본적으로 구성되어 있는 것이다.

systemd timer 사용

  • RHEL7 부터 systemd가 도입되면서, systemd timer unit라는 새로운 함수를 쓸 수 있다.
  • timer unit은 동일한 이름을 가진 다른 유형 (서비스같은) 유닛을 활성화한다. 이 timer unit을 사용하여 타이머 기반으로 다른 unit을 실행한다.
  • 디버깅을 쉽게 하기 위해, sytstemd 는 timer 이벤트를 system journal에 기록한다.
  • sysstat에서는 sa1, sa2를 수행해야 하는데, 각각 sa1를 위한 timer와 service, sa2를 위한 timer와 service가 존재한다.

sa1 : sysstat-collect.timer / sysstat-collect.service

sa2 : sysstat-summary.timer / sysstat-summary.service

  • sa1의 timer와 service를 열어보자.
[root@RH442 system]# cat sysstat-collect.timer
# /usr/lib/systemd/system/sysstat-collect.timer
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
#        Activates activity collector every 10 minutes

[Unit]
Description=Run system activity accounting tool every 10 minutes

[Timer]
OnCalendar=*:00/10

[Install]
WantedBy=sysstat.service
[root@RH442 system]#

[Unit]

Description=Run system activity accounting tool every 10 minutes

→ 이 타이머가 하는 일을 설명합니다. 여기서는 "10분마다 시스템 활동을 기록하는 도구를 실행한다"고 되어 있습니다.

[Timer]

OnCalendar=*:00/10 -> 즉 매 10분마다 해당하는 장치 (sysstat-collect.service)를 활성화하는것이다.

→ 타이머가 실행되는 주기를 정의합니다.

*는 "매년, 매월, 매일"을 뜻합니다.
:00/10은 매 시각의 0분부터 시작해서 10분 간격으로 실행된다는 뜻입니다.

예: 00:00, 00:10, 00:20, ..., 23:50에 실행됩니다.

[Install]

WantedBy=sysstat.service

→ 이 타이머가 활성화될 때 관련된 서비스(sysstat.service)도 함께 동작하도록 설정합니다.

  • 즉 타이머를 통해 서비스를 실행하게 한다. 서비스는 아래와 같다.
[root@RH442 system]# cat sysstat-collect.service
# /usr/lib/systemd/system/sysstat-collect.service
# (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl>
#
# sysstat-11.7.3 systemd unit file:
#        Collects system activity data
#        Activated by sysstat-collect.timer unit

[Unit]
Description=system activity accounting tool
Documentation=man:sa1(8)
After=sysstat.service

[Service]
Type=oneshot
User=root
ExecStart=/usr/lib64/sa/sa1 1 1

[root@RH442 system]#
  • 해당 서비스는 어떤식으로 실행되는지, 어떤 타입인지, 어떤 명령어를 수행하는지 등이 잘 나온다.
  • 더이상 자세한 설명은 생략한다.
  • 이 타이머를 활성화 하려면 일반적인 서비스와 동일하게 한다.
systemctl enable sysstat-collect.timer
systemctl start sysstat-collect.timer
  • sysstat을 enable 하고 실행하면 이 timer도 함께 자동으로 된다.
  • 또는 이런식으로 하면 한번에 enable도 된다.
systemctl enable --now <unitname>.timer
  • 타이머 상태를 확인하려면

systemctl status sysstat-collect.timer

systemctl status sysstat-collect.service

  • 타이머 장치의 구성파일 변경 후에는 리로드가 필요하다. 이 명령은 systemd에 변경 사항을 알리며, systemd 관리자 구성을 다시 로드한다
  • systemctl daemon-reload

참조

mpstat(1),iostat(1), pidstat(1), vmstat(8), sar(1), sa1(8), sa2(8), sadc(8), sysstat(5), systemd.time(7), systemd.timer(5) 도움말 페이지

SYSSTAT 유틸리티 홈 페이지에 오신 것을 환영합니다. https://sysstat.github.io

Brendan Gregg의 원본 그래픽은 Linux 성능 가시성: sar 여기서 확인 가능https://www.brendangregg.com/linuxperf.html

+ Recent posts