다음을 통해 공유


Linux VM에 대한 성능 메트릭 수집

적용 대상: ✔️ Linux VM

이 문서에서는 Sysstat 유틸리티(성능 모니터링 도구)를 사용하여 Microsoft Azure의 Linux VM(가상 머신)에서 성능 메트릭을 검색하는 방법을 설명합니다. 이러한 유틸리티를 사용하고 출력을 읽는 방법의 예를 제공합니다.

Linux에서 성능 카운터를 수집하는 데 몇 가지 명령을 사용할 수 있습니다. 명령은 CPU 사용량, 시스템 메모리 및 시스템 로드와 uptime 같은 필수 시스템 메트릭을 좋아 vmstat 하고 제공합니다. 이러한 명령의 대부분은 기본적으로 사전 설치되지만 다른 명령은 기본 리포지토리에서 쉽게 액세스할 수 있습니다.

메트릭 유형에 따라 이러한 명령을 다음으로 분류할 수 있습니다.

Linux용 Sysstat 유틸리티 설치

Azure CLI를 통해 Bash 명령 또는 명령 실행 기능을 사용하여 Linux VM에 Sysstat 유틸리티를 설치할 수 있습니다. 이 문서에 제공된 Azure CLI 명령을 사용하는 경우 다음 두 환경 변수가 설정되어 있는지 확인합니다. 리소스 그룹 이름 및 VM 이름을 실제 값으로 바꿔야 합니다.

export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"

참고 항목

다음 명령 중 일부에는 루트 권한이 필요합니다.

Linux VM에 패키지를 설치 sysstat 하려면 다음 명령을 사용합니다.

Ubuntu:

sudo apt install sysstat -y

Red Hat:

sudo dnf install sysstat -y

SUSE:

sudo zypper install sysstat --non-interactive

CPU

mpstat

mpstat 명령은 패키지의 sysstat 일부입니다. 각 CPU의 CPU 사용률 및 평균을 표시하며 이는 CPU 사용량을 식별하는 데 유용합니다. 이 mpstat 명령은 사용 가능한 CPU의 CPU 사용률에 대한 개요를 제공하여 사용량 균형을 식별하고 단일 CPU가 오버로드되었는지를 식별합니다.

다음은 실행하는 mpstat방법의 예입니다.

mpstat -P ALL 1 2
  • -P: 통계를 표시할 프로세서를 나타내고 ALL 인수는 시스템의 모든 온라인 CPU에 대한 통계가 표시되어야 임을 나타냅니다.
  • 1: 첫 번째 숫자 인수는 새 통계를 새로 고치고 표시해야 하는 mpstat 간격(초)을 지정합니다.
  • 2: 두 번째 숫자 인수는 통계를 표시해야 하는 횟 mpstat 수를 지정합니다. 이 경우 1초 간격으로 두 개의 통계를 출력합니다.

더 긴 데이터 수집 시간을 수용하기 위해 인수 횟수를 늘릴 수 있습니다. 일반적으로 3~5초 정도면 충분합니다. 코어 수가 많은 시스템의 경우 2초로 줄이면 표시되는 데이터 볼륨을 관리하는 데 도움이 될 수 있습니다.

mpstat 출력을 읽는 방법

다음은 다음의 출력 예제입니다.mpstat

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

16:55:50     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
16:55:51     all   69.09    0.00   30.16    0.00    0.38    0.38    0.00    0.00    0.00    0.00
16:55:51       0   77.23    0.00   21.78    0.00    0.99    0.00    0.00    0.00    0.00    0.00
16:55:51       1   97.03    0.00    0.99    0.00    0.99    0.99    0.00    0.00    0.00    0.00
16:55:51       2   11.11    0.00   88.89    0.00    0.00    0.00    0.00    0.00    0.00    0.00
16:55:51       3   11.00    0.00   88.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00
16:55:51       4   83.84    0.00   16.16    0.00    0.00    0.00    0.00    0.00    0.00    0.00
16:55:51       5   76.00    0.00   23.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00
16:55:51       6   96.00    0.00    3.00    0.00    0.00    1.00    0.00    0.00    0.00    0.00
16:55:51       7  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
[...]

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   74.02    0.00   25.52    0.00    0.25    0.21    0.00    0.00    0.00    0.00
Average:       0   63.00    0.00   36.67    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       1   97.33    0.00    1.67    0.00    0.33    0.67    0.00    0.00    0.00    0.00
Average:       2   42.33    0.00   57.33    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       3   34.33    0.00   65.00    0.00    0.33    0.33    0.00    0.00    0.00    0.00
Average:       4   88.63    0.00   11.04    0.00    0.00    0.33    0.00    0.00    0.00    0.00
Average:       5   71.33    0.00   28.33    0.00    0.33    0.00    0.00    0.00    0.00    0.00
Average:       6   95.65    0.00    4.01    0.00    0.00    0.33    0.00    0.00    0.00    0.00
Average:       7   99.67    0.00    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00

주의해야 할 몇 가지 중요한 사항이 있습니다. 첫 번째 줄은 유용한 정보를 제공합니다.

  • 커널 및 릴리스: 5.14.0-362.8.1.el9_3.x86_64
  • 호스트 이름: alma9
  • 날짜: 02/21/24
  • 건축학: _x86_64_
  • 총 CPU 수(이 정보는 다른 명령의 출력을 해석하는 데 유용합니다.) (8 CPU)

그런 다음 CPU에 대한 메트릭이 표시됩니다. 각 열에 대한 설명은 다음과 같습니다.

  • Time: 샘플이 수집된 시기를 나타내는 타임스탬프입니다.
  • CPU: CPU의 숫자 식별자입니다. 식별자는 all 모든 CPU의 평균을 나타냅니다.
  • %usr: 사용자 공간 프로세스(일반적으로 사용자 애플리케이션)의 CPU 사용률입니다.
  • %nice: 좋은(우선 순위) 값을 가진 사용자 공간 프로세스의 CPU 사용률 비율입니다.
  • %sys: 커널 공간 프로세스별 CPU 사용률 비율입니다.
  • %iowait: 미해결 I/O 작업을 기다리는 CPU 유휴 시간의 백분율입니다.
  • %irq: 하드웨어 인터럽트 서비스에 소요된 CPU 시간의 비율입니다.
  • %soft: 소프트웨어 인터럽트 서비스에 소요된 CPU 시간의 비율입니다.
  • %steal: VM이 다른 VM에 서비스를 제공하는 데 소요된 CPU 시간의 비율입니다(CPU 오버프로비전 부족으로 인해 Azure에는 적용되지 않음).
  • %guest: 가상 CPU가 VM을 제공하는 데 소요된 CPU 시간의 비율입니다(Azure에는 적용되지 않음, VM을 실행하는 운영 체제에만 해당).
  • %gnice: VM을 제공하는 데 사용된 값이 좋은 가상 CPU의 CPU 시간 비율입니다(Azure에는 적용되지 않으며 VM을 실행하는 운영 체제와만 관련됨).
  • %idle: 유휴 상태이고 I/O 요청을 기다리지 않는 CPU 시간의 백분율입니다.

주요 고려 사항

다음의 mpstat출력을 검토할 때 주요 고려 사항:

  • 모든 CPU가 제대로 로드되고 단일 CPU가 모든 부하를 제공하지 않는지 확인합니다. 이 정보는 단일 스레드 애플리케이션을 나타낼 수 있습니다.
  • 커널 프로세스를 처리하는 것보다 실제 워크로드에 더 많은 시간을 소비했음을 나타내기 때문에 둘 사이의 %usr %sys정상 균형을 찾습니다.
  • %iowait 높은 값이 I/O 요청을 지속적으로 대기하는 시스템을 나타낼 수 있으므로 백분율을 찾습니다.
  • %soft 높은 사용량은 높은 네트워크 트래픽을 나타낼 수 있습니다.

vmstat

vmstat 유틸리티는 대부분의 Linux 배포판에서 널리 사용할 수 있습니다. 단일 창에서 CPU, 메모리 및 디스크 I/O 사용률에 대한 개략적인 개요를 제공합니다.

다음은 실행하는 vmstat방법의 예입니다.

vmstat -w 1 5
  • -w: 와이드 인쇄를 사용하여 일관된 열을 유지합니다.
  • 1: 첫 번째 숫자 인수는 각 보고서 사이의 간격(초)을 지정합니다. 이 경우 vmstat는 1초마다 보고서를 출력합니다.
  • 5: 두 번째 숫자 인수는 vmstat에서 생성해야 하는 보고서 수를 지정합니다. 5 여기에 지정된 경우 vmstat는 총 5개의 보고서를 생성합니다.

vmstat 출력을 읽는 방법

다음은 다음의 출력 예제입니다.vmstat

--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
   r    b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
  14    0            0     26059408          164       137468    0    0    89  3228   56  122   3   1  95   1   0
  14    1            0     24388660          164       145468    0    0     0  7811 3264 13870  76  24   0   0   0
  18    1            0     23060116          164       155272    0    0    44  8075 3704 15129  78  22   0   0   0
  18    1            0     21078640          164       165108    0    0   295  8837 3742 15529  73  27   0   0   0
  15    2            0     19015276          164       175960    0    0     9  8561 3639 15177  73  27   0   0   0

출력은 다음 6개의 그룹으로 분류됩니다. 출력은 전체 시스템(즉, 집계된 모든 CPU 및 블록 디바이스)에 대한 전체 통계를 보여 줍니다.

  • procs: 프로세스에 대한 통계입니다.
  • memory: 시스템 메모리에 대한 통계입니다.
  • swap: 스왑에 대한 통계입니다.
  • io: 디스크 I/O에 대한 통계입니다.
  • system: 컨텍스트 전환 및 인터럽트 통계입니다.
  • cpu: CPU 사용량에 대한 통계입니다.

procs

procs 섹션에는 다음 두 개의 열이 있습니다.

  • r: 실행 큐의 실행 가능한 프로세스 수입니다.
  • b: I/O를 기다리는 동안 차단된 프로세스의 수입니다.

이 섹션에서는 시스템에 병목 현상이 있는지 즉시 보여줍니다. 두 열의 개수가 많을수록 리소스를 대기하고 대기하는 프로세스가 표시됩니다.

열은 r CPU 시간이 실행되기를 기다리는 프로세스 수를 나타냅니다. 이 숫자를 해석하는 쉬운 방법은 다음과 같습니다. 큐의 프로세스 r 수가 총 CPU 수보다 크면 시스템의 CPU가 너무 많이 로드되어 실행을 기다리는 모든 프로세스에 CPU 시간을 할당할 수 없다는 것을 유추할 수 있습니다.

열은 b 실행 대기 중인 프로세스 수를 나타내며 I/O 요청에 의해 차단됩니다. 이 열의 숫자가 많으면 I/O가 높은 시스템을 나타내며 I/O 요청이 완료되기를 기다리는 다른 프로세스로 인해 프로세스를 실행할 수 없습니다. 이는 높은 디스크 대기 시간을 나타낼 수도 있습니다.

memory

메모리 섹션에는 4개의 열이 있습니다. 값은 바이트 단위로 표시됩니다. 이 섹션에서는 메모리 사용량에 대한 개략적인 개요를 제공합니다.

  • swpd: 사용된 스왑 메모리의 양입니다.
  • free: 사용 가능한 메모리의 양입니다.
  • buff: 버퍼에 사용되는 메모리 양입니다.
  • cache: 캐시에 사용되는 메모리 양입니다.

swap

스왑 섹션에는 두 개의 열이 있습니다.

  • si: 초당 교환된 메모리 양(시스템 메모리에서 스왑으로 이동)입니다.
  • so: 초당 교환된 메모리 양(스왑에서 시스템 메모리로 이동)입니다.

높은 si 값이 관찰되면 시스템 메모리가 부족하고 페이지를 전환(교환)하는 시스템을 나타낼 수 있습니다.

io

io 섹션에는 두 개의 열이 있습니다. 이러한 값은 초당 블록 단위입니다.

  • bi: 초당 블록 디바이스에서 수신된 블록 수(초당 블록 읽기)입니다.
  • bo: 초당 블록 디바이스로 전송된 블록 수(초당 쓰기 수)입니다.

시스템

시스템 섹션에는 두 개의 열이 있습니다.

  • in: 초당 인터럽트 수입니다.
  • cs: 초당 컨텍스트 전환 수입니다.

초당 인터럽트 수가 많을수록 하드웨어 디바이스(예: 네트워크 작업)로 사용 중인 시스템을 나타낼 수 있습니다.

많은 수의 컨텍스트 스위치는 짧은 실행 프로세스가 많은 사용 중인 시스템을 나타낼 수 있습니다. 여기에 좋거나 나쁜 숫자가 없습니다.

cpu(cpu)

섹션 cpu 에는 5개의 열이 있습니다.

  • us: 사용자 공간 사용률 비율입니다.
  • sy: 시스템(커널 공간) 사용률입니다.
  • id: CPU 유휴 시간의 사용률 비율입니다.
  • wa: I/O를 사용하는 프로세스를 기다리는 CPU 유휴 시간의 사용률입니다.
  • st: 다른 가상 CPU를 제공하는 데 소요된 CPU 시간의 사용률입니다(Azure에는 적용되지 않음).

값은 백분율로 표시됩니다. 이러한 값은 유틸리티에서 제공하는 mpstat 값과 동일하며 CPU 사용량에 대한 개략적인 개요를 제공합니다. 이러한 값을 검토할 때 mpstat와 유사한 프로세스를 따릅니다.

가동

이 유틸리티는 uptime 부하 평균 값을 사용하여 시스템 부하에 대한 광범위한 개요를 제공합니다.

uptime

작동 시간 출력을 읽는 방법

다음은 다음의 출력 예제입니다.uptime

16:55:53 up 9 min,  2 users,  load average: 9.26, 2.91, 1.18

load average 개의 숫자를 표시합니다. 이러한 숫자는 시스템 로드( 1및 분 간격) 515 에 해당합니다.

이러한 값을 해석하려면 이전 mpstat 출력에서 가져온 시스템에서 사용할 수 있는 CPU 수를 알고 있는 것이 중요합니다. 값은 CPU의 총 수에 따라 달라지므로 출력을 예로 들면 mpstat 시스템에 8개의 CPU가 있고 부하 평균 8 은 모든 코어가 100%로 로드됨을 의미합니다.

4 은 CPU의 절반이 100%(또는 모든 CPU에 대해 50%의 총 부하)로 로드됨을 의미합니다. 이전 출력에서 부하 평균은 9.26CPU가 약 115%로 로드됨을 의미합니다.

, 5m15m 간격은 1m시간이 지남에 따라 부하가 증가하거나 감소하는지를 식별하는 데 도움이 됩니다.

또한 명령을 nproc 사용하여 CPU 수를 검색할 수 있습니다.

메모리

메모리의 경우 두 명령이 메모리 사용량 세부 정보를 검색할 수 있습니다.

free

free 명령은 시스템 메모리 사용률을 보여줍니다.

다음은 실행하는 free방법의 예입니다.

free -h
  • -h: 이 옵션은 사람이 읽을 수 있도록 출력 형식을 지정합니다. 메모리 크기를 바이트에서 읽기 쉬운 형식(킬로바이트, 메가바이트 및 기가바이트)으로 변환하고 적절한 단위 레이블(KB, MB 및 GB)을 추가합니다.

무료 출력을 읽는 방법

다음은 다음의 출력 예제입니다.free

               total        used        free      shared  buff/cache   available
Mem:            31Gi        19Gi        12Gi        23Mi        87Mi        11Gi
Swap:           23Gi          0B        23Gi

출력에서 시스템 메모리와 available 메모리 및 교환을 used 관찰 total 합니다total. 사용 가능한 메모리는 사용자 애플리케이션에 반환할 수 있는 캐시에 할당된 메모리를 고려합니다. 일부 스왑 사용은 자주 사용되지 않는 메모리 페이지를 교환하도록 이동할 수 있으므로 최신 커널에서 정상입니다.

swapon

swapon 명령은 스왑이 구성된 위치와 스왑 디바이스 또는 파일의 각 우선 순위를 표시합니다.

다음은 실행하는 swapon방법의 예입니다.

swapon -s

다음은 다음의 출력 예제입니다.swapon

Filename      Type          Size          Used   Priority
/dev/zram0    partition     16G           0B      100
/mnt/swapfile file          8G            0B      -2

이 정보는 데이터 또는 OS 디스크와 같이 비정상 위치에 스왑이 구성되어 있는지 확인하는 데 중요합니다. Azure 참조 프레임에서는 최상의 성능을 제공하므로 임시 드라이브에서 교환을 구성해야 합니다.

주요 고려 사항

  • 메모리는 유한한 리소스입니다. 시스템 메모리(RAM)와 스왑이 모두 소진되면 메모리 부족 킬러(OOM 킬러)가 프로세스를 종료합니다.
  • 대기 시간 차이로 인해 I/O에 문제가 발생할 수 있으므로 데이터 디스크 또는 OS 디스크에 스왑이 구성되지 않은지 확인합니다. 교환은 임시 드라이브에서 구성해야 합니다.
  • 또한 출력에서 자유 값이 0 free -h 에 가깝게 표시되는 것이 일반적입니다. 이 동작은 페이지 캐시 때문입니다. 커널은 필요에 따라 해당 페이지를 해제합니다.

I/O

디스크 I/O는 디스크에 대한 대기 시간이 도달할 100ms+수 있으므로 Azure에서 제한될 때 가장 많이 발생하는 영역 중 하나입니다. 다음 명령은 이러한 시나리오를 식별하는 데 도움이 될 수 있습니다.

iostat

유틸리티 iostat 는 패키지의 sysstat 일부입니다. 각 블록 디바이스에 대한 사용 통계를 표시하고 블록 관련 성능 문제를 식별하는 데 도움이 됩니다. 처리량, 대기 시간 및 큐 크기와 같은 메트릭에 대한 세부 정보를 제공합니다. 이러한 메트릭은 디스크 I/O가 제한 요소가 되는지 이해하는 데 도움이 됩니다.

다음은 실행하는 iostat방법의 예입니다.

iostat -dxtm 1 5
  • -d: 각 디바이스에 대한 사용 현황 보고서입니다.
  • -x: 확장된 통계입니다.
  • -t: 각 보고서의 타임스탬프를 표시합니다.
  • -m: MB/s로 표시됩니다.
  • 1: 첫 번째 숫자 인수는 디스플레이를 새로 고치는 빈도(초)를 나타냅니다.
  • 2: 두 번째 숫자 인수는 데이터가 새로 고쳐지는 횟수를 나타냅니다.

iostat 출력을 읽는 방법

다음은 다음의 출력 예제입니다.iostat

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

02/21/24 16:55:50
Device            r/s     rMB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wMB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dMB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda              1.07      0.02     0.00   0.00    1.95    20.40   23.25     24.55     3.30  12.42  113.75  1081.06    0.26    537.75     0.26  49.83    0.03 2083250.04    0.00    0.00    2.65   2.42
sdb             16.99      0.67     0.36   2.05    2.00    40.47   65.26      0.44     1.55   2.32    1.32     6.92    0.00      0.00     0.00   0.00    0.00     0.00   30.56    1.30    0.16   7.16
zram0            0.51      0.00     0.00   0.00    0.00     4.00    0.00      0.00     0.00   0.00    0.00     4.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00

출력에는 중요하지 않은 여러 열이 있습니다(옵션으로 인해 -x 추가 열). 중요한 사항 중 일부는 다음과 같습니다.

  • r/s: 초당 읽기 작업(IOPS)입니다.
  • rMB/s: 초당 MB를 읽습니다.
  • r_await: 읽기 대기 시간(밀리초)입니다.
  • rareq-sz: 평균 읽기 요청 크기(킬로바이트)입니다.
  • w/s: 초당 쓰기 작업(IOPS)입니다.
  • wMB/s: 초당 MB를 씁니다.
  • w_await: 대기 시간을 밀리초 단위로 작성합니다.
  • wareq-size: 평균 쓰기 요청 크기(킬로바이트)입니다.
  • aqu-sz: 평균 큐 크기입니다.

주요 고려 사항

  • r/s, w/s (IOPS) rMB/swMB/s이러한 값이 지정된 디스크의 한도 내에 있는지 확인합니다. 값이 한도에 가까울 경우 디스크가 제한되어 대기 시간이 높아집니다. 이 정보는 .의 mpstat메트릭을 사용하여 %iowait 확증할 수도 있습니다.
  • 대기 시간은 디스크가 예상대로 작동하는지 확인하는 훌륭한 메트릭입니다. 일반적으로 PremiumSSD의 예상 대기 시간보다 9ms 작습니다. 다른 제품에는 대기 시간 목표가 다릅니다.
  • 큐 크기는 채도를 나타내는 좋은 지표입니다. 일반적으로 요청은 거의 실시간으로 제공되며 큐가 증가하지 않을 때 그 수는 1에 가깝게 유지됩니다. 숫자가 클수록 디스크 포화를 나타낼 수 있습니다(즉, 요청이 대기 중). 이 메트릭에는 양호하거나 잘못된 숫자가 없습니다. 둘 이상의 숫자를 이해한다는 것은 요청이 대기 중임을 의미하며 디스크 채도가 있는지 확인하는 데 도움이 됩니다.

lsblk

이 유틸리티는 lsblk 시스템에 연결된 블록 디바이스를 보여줍니다. 성능 메트릭을 제공하지는 않지만 이러한 디바이스를 구성하는 방법과 사용 중인 탑재 지점에 대한 간략한 개요를 제공합니다.

다음은 실행하는 lsblk방법의 예입니다.

lsblk

lsblk 출력을 읽는 방법

다음은 다음의 출력 예제입니다.lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  300G  0 disk
└─sda1   8:1    0  300G  0 part /mnt
sdb      8:16   0   30G  0 disk
├─sdb1   8:17   0    1M  0 part
├─sdb2   8:18   0  200M  0 part /boot/efi
├─sdb3   8:19   0    1G  0 part /boot
└─sdb4   8:20   0 28.8G  0 part /
zram0  252:0    0   16G  0 disk [SWAP]

주요 고려 사항

  • 디바이스가 탑재되는 위치를 찾습니다.
  • 사용하도록 설정된 경우 스왑이 데이터 디스크 또는 OS 디스크 내에서 구성되지 않는지 확인합니다.
  • Azure에서 블록 디바이스와 LUN의 상관 관계를 지정하는 쉬운 방법은 실행하는 ls -lr /dev/disk/azure것입니다.

Process

프로세스별로 세부 정보를 수집하면 시스템 부하의 원본을 이해하는 데 도움이 됩니다. 프로세스 통계를 수집하기 위한 주요 유틸리티는 pidstat각 프로세스에 대한 CPU, 메모리 및 I/O 통계에 대한 세부 정보를 제공하기 때문에입니다. 마지막으로, ps 프로세스를 상위 CPU 및 메모리 사용량별로 간단하게 정렬하면 메트릭이 완료됩니다.

참고 항목

이러한 명령에는 현재 사용자의 프로세스뿐만 아니라 실행 중인 모든 프로세스의 세부 정보를 표시하는 데 사용하는 sudo 루트 권한이 필요합니다.

pidstat

유틸리티 pidstat 도 패키지의 sysstat 일부입니다. 지정된 시간 범위에 대한 메트릭을 표시한다는 점에서 iostat와 유사 mpstat 합니다. 기본적으로 pidstat 활동이 있는 프로세스에 대해서만 메트릭을 표시합니다.

인수 pidstat 는 다른 sysstat 유틸리티와 동일합니다.

  • 1: 첫 번째 숫자 인수는 디스플레이를 새로 고치는 빈도(초)를 나타냅니다.
  • 2: 두 번째 숫자 인수는 데이터가 새로 고쳐지는 횟수를 나타냅니다.

참고 항목

작업이 있는 프로세스가 많으면 출력이 상당히 증가할 수 있습니다.

CPU 통계 처리

프로세스 CPU 통계를 수집하려면 옵션 없이 실행 pidstat 합니다.

pidstat 1 2
CPU 통계 출력을 읽는 방법

다음은 다음의 출력 예제입니다.pidstat

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

# Time        UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
16:55:48        0        66    0.0%    1.0%    0.0%    0.0%    1.0%     0  kworker/u16:2-xfs-cil/sdb4
16:55:48        0        70    0.0%    1.0%    0.0%    0.0%    1.0%     0  kworker/u16:6-xfs-cil/sdb4
16:55:48        0        92    0.0%    1.0%    0.0%    0.0%    1.0%     3  kworker/3:1H-kblockd
16:55:48        0       308    0.0%    1.0%    0.0%    0.0%    1.0%     1  kworker/1:1H-kblockd
16:55:48        0      2068    0.0%    1.0%    0.0%    0.0%    1.0%     1  kworker/1:3-xfs-conv/sdb4
16:55:48        0      2181   63.1%    1.0%    0.0%   35.9%   64.1%     5  stress-ng-cpu
16:55:48        0      2182   28.2%    0.0%    0.0%   70.9%   28.2%     6  stress-ng-cpu
16:55:48        0      2183   28.2%    0.0%    0.0%   69.9%   28.2%     7  stress-ng-cpu
16:55:48        0      2184   62.1%    0.0%    0.0%   36.9%   62.1%     0  stress-ng-cpu
16:55:48        0      2185   43.7%    0.0%    0.0%   54.4%   43.7%     2  stress-ng-cpu
16:55:48        0      2186   30.1%    0.0%    0.0%   68.0%   30.1%     7  stress-ng-cpu
16:55:48        0      2187   64.1%    0.0%    0.0%   34.0%   64.1%     3  stress-ng-cpu

이 명령은 각 프로세스에 %usr대한 , %guest %system(Azure에 적용되지 않음) %wait및 총 %CPU 사용량을 표시합니다.

주요 고려 사항
  • I/O 대기가 차단된 프로세스를 나타낼 수 있으므로 높은(iowait) 백분율을 가진 %wait 프로세스를 찾습니다. 이는 디스크 포화도를 나타낼 수도 있습니다.
  • 단일 스레드 애플리케이션을 나타낼 수 있으므로 단일 프로세스가 CPU의 100%를 사용하지 않는지 확인합니다.

메모리 통계 처리

프로세스 메모리 통계를 수집하려면 다음 -r 옵션을 사용합니다.

pidstat -r 1 2
메모리 통계 출력을 읽는 방법

다음은 다음의 출력 예제입니다.pidstat

Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9)       02/21/24        _x86_64_        (8 CPU)

# Time        UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
16:55:49        0      2199 119244.12      0.00   13.6G    7.4G  23.5%  stress-ng-vm
16:55:49        0      2200 392911.76      0.00   13.6G    9.3G  29.7%  stress-ng-vm
16:55:49        0      2211   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2220      0.98      0.00   71.8M    2.4M   0.0%  stress-ng-iomix
16:55:49        0      2239   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2240   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix
16:55:49        0      2256      0.98      0.00   71.8M    2.4M   0.0%  stress-ng-iomix
16:55:49        0      2265   1129.41      0.00   72.3M    3.2M   0.0%  stress-ng-iomix

수집된 메트릭은 다음과 같습니다.

  • minflt/s: 초당 사소한 오류입니다. 이 메트릭은 RAM(시스템 메모리)에서 로드된 페이지 수를 나타냅니다.
  • mjflt/s: 초당 주요 오류 수입니다. 이 메트릭은 디스크에서 로드된 페이지 수를 나타냅니다(SWAP).
  • VSZ: 바이트 단위로 사용되는 가상 메모리입니다.
  • RSS: 사용된 상주 메모리(실제 할당된 메모리)(바이트)입니다.
  • %MEM: 사용된 총 메모리의 백분율입니다.
  • Command: 프로세스의 이름입니다.
주요 고려 사항
  • 이 값은 디스크 간에 페이지를 교환하는 프로세스를 나타내기 때문에 초당 주요 오류를 찾습니다. 이 동작은 메모리 소모를 나타내고 느린 교환으로 OOM 인한 이벤트 또는 성능 저하로 이어질 수 있습니다.
  • 단일 프로세스가 사용 가능한 메모리의 100%를 소비하지 않는지 확인합니다. 이 동작은 메모리 누수일 수 있습니다.

--human 옵션을 사용하여 사람이 읽을 수 있는 형식(즉, KB, MB 및 GB)으로 숫자를 표시할 수 있습니다.

프로세스 I/O 통계

프로세스 I/O 통계를 수집하려면 다음 -d 옵션을 사용합니다.

pidstat -d 1 2

다음은 다음의 출력 예제입니다.pidstat


# Time        UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
16:55:50        0        86     55.4k      0.0B      0.0B       0  kworker/1:1-xfs-conv/sdb4
16:55:50        0      2201      4.0k    194.1k      0.0B       0  stress-ng-iomix
16:55:50        0      2202      0.0B     99.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2203      0.0B     23.8k      0.0B       0  stress-ng-iomix
16:55:50        0      2204      0.0B     15.8k      0.0B       0  stress-ng-iomix
16:55:50        0      2212      0.0B    103.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2213      4.0k     99.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2215      0.0B    178.2k      0.0B       0  stress-ng-iomix
16:55:50        0      2216      7.9k    237.6k      0.0B       0  stress-ng-iomix
16:55:50        0      2218      0.0B     95.0k      0.0B       0  stress-ng-iomix
16:55:50        0      2221      0.0B     15.8k      0.0B       0  stress-ng-iomix

수집된 메트릭은 다음과 같습니다.

  • kB_rd/s: 초당 읽기 킬로바이트입니다.
  • kB_wr/s: 초당 킬로바이트(KB)를 씁니다.
  • Command: 프로세스의 이름입니다.
주요 고려 사항
  • 초당 읽기/쓰기 속도가 높은 단일 프로세스를 찾습니다. 이 정보는 문제를 식별하는 것 이상의 I/O를 포함하는 프로세스에 대한 지침입니다.

--human 옵션을 사용하여 사람이 읽을 수 있는 형식(즉, KB, MB 및 GB)으로 숫자를 표시할 수 있습니다.

ps

마지막으로, ps 명령은 시스템 프로세스를 표시하고 CPU 또는 메모리별로 정렬할 수 있습니다.

상위 10개 프로세스를 기준으로 %CPU 정렬하고 가져오려면 다음을 수행합니다.

ps aux --sort=-%cpu | head -10
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        2190 94.8  0.0  73524  5588 pts/1    R+   16:55   0:14 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2200 56.8 43.1 14248092 14175632 pts/1 R+ 16:55   0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2192 50.6  0.0  73524  5836 pts/1    R+   16:55   0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2184 50.4  0.0  73524  5836 pts/1    R+   16:55   0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2182 44.3  0.0  73524  5808 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2187 43.4  0.0  73524  5708 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2199 42.9 33.0 14248092 10845272 pts/1 R+ 16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2186 42.0  0.0  73524  5836 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2191 41.2  0.0  73524  5592 pts/1    R+   16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240

상위 10개 프로세스를 기준으로 %MEM 정렬하고 가져오려면 다음을 수행합니다.

ps aux --sort=-%mem| head -10
       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        2200 57.0 43.1 14248092 14175632 pts/1 R+ 16:55   0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        2199 43.0 33.0 14248092 10871144 pts/1 R+ 16:55   0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root        1231  0.2  0.1 336308 33764 ?        Sl   16:46   0:01 /usr/bin/python3 -u bin/WALinuxAgent-2.9.1.1-py3.8.egg -run-exthandlers
root         835  0.0  0.0 127076 24860 ?        Ssl  16:46   0:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
root        1199  0.0  0.0  30164 15600 ?        Ss   16:46   0:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root           1  0.2  0.0 173208 12356 ?        Ss   16:46   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root         966  0.0  0.0 3102460 10936 ?       Sl   16:46   0:00 /var/lib/waagent/Microsoft.GuestConfiguration.ConfigurationforLinux-1.26.60/GCAgent/GC/gc_linux_service
panzer      1803  0.0  0.0  22360  8220 ?        Ss   16:49   0:00 /usr/lib/systemd/systemd --user
root        2180  0.0  0.0  73524  6968 pts/1    SL+  16:55   0:00 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240

보고서 통합

다음 Bash 스크립트는 단일 실행에서 모든 세부 정보를 수집하고 나중에 참조할 수 있도록 출력을 파일에 추가할 수 있습니다.

mpstat -P ALL 1 2 && vmstat -w 1 5 && uptime && free -h && swapon && iostat -dxtm 1 1 && lsblk && ls -l /dev/disk/azure && pidstat 1 1 -h --human && pidstat -r 1 1 -h --human && pidstat -d 1 1 -h --human && ps aux --sort=-%cpu | head -20 && ps aux --sort=-%mem | head -20

실행하려면 이전 콘텐츠가 포함된 파일을 만들고 실행chmod +x gather.sh하여 권한을 추가 execute 한 다음 sudo ./gather.sh.

이 스크립트는 명령의 출력을 스크립트가 호출된 동일한 디렉터리에 있는 파일에 저장합니다.

또한 이 문서에서 다루는 Bash 블록 코드의 모든 명령은 확장을 사용하여 run-command Azure CLI를 통해 실행하고 출력 jq 을 구문 분석하여 명령을 로컬로 실행하는 것과 유사한 출력을 가져올 수 있습니다.

az vm run-command invoke -g $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts "ls -l /dev/disk/azure" | jq -r '.value[0].message'

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.