vmstat 명령

사용할 첫 번째 도구는 다양한 시스템 자원과 관련 성능 문제에 대한 간략한 정보를 신속하게 제공하는 vmstat 명령입니다.

vmstat 명령은 실행 및 대기 큐에 있는 커널 스레드, 메모리, 페이징, 디스크, 인터럽트, 시스템 호출, 문맥 전환, CPU 활동에 대한 통계를 보고합니다. 보고된 CPU 활동은 디스크 입출력의 사용자 모드, 시스템 모드, 유휴 시간 및 대기에 대한 백분율 분석입니다.
참고: 간격을 지정하지 않고 vmstat 명령을 사용할 경우 단일 보고서가 생성됩니다. 단일 보고서는 시스템이 시작된 이후부터의 평균 보고서입니다. Count 매개변수는 Interval 매개변수와 함께 지정할 수 있습니다. Count 매개변수 없이 Interval 매개변수를 지정할 경우 보고서가 계속 생성됩니다.
CPU 모니터로서 vmstat 명령은 iostat 명령보다 뛰어납니다. 즉, vmstat 명령은 보고서 출력당 한 개 행을 제공하므로 스크롤할 때 스캔하기가 더 쉽고, 시스템에 접속된 디스크가 여러 개 있을 경우 오버헤드가 덜 발생합니다. 다음 예제는 프로그램이 실행되지 않거나 CPU 사용량이 많아 다중 사용자 환경에서 실행되는 상황을 식별하는 데 도움을 줄 수 있습니다.
# vmstat 2
kthr    memory              page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  0 22478  1677   0   0   0   0    0   0 188 1380 157 57 32  0 10
 1  0 22506  1609   0   0   0   0    0   0 214 1476 186 48 37  0 16
 0  0 22498  1582   0   0   0   0    0   0 248 1470 226 55 36  0  9

 2  0 22534  1465   0   0   0   0    0   0 238  903 239 77 23  0  0
 2  0 22534  1445   0   0   0   0    0   0 209 1142 205 72 28  0  0
 2  0 22534  1426   0   0   0   0    0   0 189 1220 212 74 26  0  0
 3  0 22534  1410   0   0   0   0    0   0 255 1704 268 70 30  0  0
 2  1 22557  1365   0   0   0   0    0   0 383  977 216 72 28  0  0

 2  0 22541  1356   0   0   0   0    0   0 237 1418 209 63 33  0  4
 1  0 22524  1350   0   0   0   0    0   0 241 1348 179 52 32  0 16
 1  0 22546  1293   0   0   0   0    0   0 217 1473 180 51 35  0 14

이 출력은 타이프 루프의 프로그램을 사용량이 많은 다중 사용자 시스템에 도입한 결과를 보여줍니다. 처음 세 개의 보고서(요약이 제거됨)에서 사용자는 50-55%, 시스템은 30-35%, 입출력 대기는 10-15% 정도의 균형을 이루고 있음을 알 수 있습니다. 루핑 프로그램이 시작되면 사용 가능한 CPU 순환이 모두 사용됩니다. 루핑 프로그램에서는 입출력이 발생하지 않기 때문에, 입출력 대기로 인해 이전에 사용되지 않았던 CPU 순환이 모두 소모될 수 있습니다. 더 심하게는, 유용한 프로세스가 CPU를 포기할 때 항상 CPU를 인계받을 준비가 된 프로세스를 표시합니다. 루핑 프로그램은 다른 모든 포어그라운드 프로세스와 동일한 우선순위를 갖기 때문에, 다른 프로그램이 작업 지정 가능 상태가 되었을 때 CPU를 포기할 필요가 없습니다. 프로그램은 약 10초간(5개의 보고서) 실행되며 그런 다음 vmstat 명령을 통해 보고된 활동이 더 정상적인 패턴으로 돌아갑니다.

최적의 사용은 CPU가 특정 시간의 100% 작동입니다. CPU를 공유할 필요가 없는 단일 사용자 시스템의 경우가 이러한 사용에 해당합니다. 일반적으로, us + sy 시간이 90% 미만인 경우, 단일 사용자 시스템에서는 CPU 제한 상태로 간주되지 않습니다. 그러나 다중 사용자 시스템에서 us + sy 시간이 80%를 초과하는 경우, 프로세서가 실행 큐에서 대기하면서 시간을 소비할 수 있습니다. 응답 시간과 처리량이 저하될 수 있습니다.

CPU가 병목 상태인지 확인하려면 vmstat 보고서에서 네 개의 cpu 열과 두 개의 kthr(커널 스레드) 열을 고려하십시오. 또한 faults 열을 살펴볼 필요도 있습니다.

  • cpu

    간격 동안의 CPU 시간 사용량에 대한 백분율 분석입니다. cpu 열은 다음과 같습니다.

    • us

      us 열은 사용자 모드에서 소비되는 CPU 시간의 퍼센트를 보여줍니다. UNIX 프로세스는 사용자 모드 또는 시스템 (커널) 모드에서 실행될 수 있습니다. 사용자 모드에서는 프로세스가 애플리케이션 내에서 실행되므로 계산, 메모리 관리 또는 세트 변수를 수행하는 데 커널 자원이 필요하지 않습니다.

    • sy

      sy 열은 CPU가 시스템 모드에서 프로세스를 실행한 시간의 백분율을 자세히 보여줍니다. 여기에는 커널 프로세스(kprocs) 및 커널 자원에 액세스하는 데 필요한 다른 프로세스에 의해 소비되는 CPU 자원이 포함됩니다. 프로세스에 커널 자원이 필요한 경우, 프로세스가 시스템 호출을 실행해야 하므로 해당 자원이 사용 가능해지도록 시스템 모드로 전환됩니다. 예를 들어, 파일을 읽거나 쓰려면 메모리 맵핑된 파일이 사용되지 않는 한, 파일을 열고 특정 위치를 찾고 데이터를 읽고 쓰는 데 커널 자원이 필요합니다.

    • id

      id 열은 보류 중인 로컬 디스크 입출력 없이, CPU가 유휴 또는 대기 상태인 시간의 백분율을 보여줍니다. 실행에 사용할 수 있는 스레드가 없는 경우(실행 큐가 비어 있음), 시스템에서 대기 스레드를(유휴 kproc라고도 함) 작업 지정합니다. SMP 시스템에서는 프로세서당 하나의 대기 스레드를 작업 지정할 수 있습니다. ps 명령(-k 또는 -g 0 옵션과 함께 사용됨)을 통해 생성된 보고서에서는 kproc 또는 wait로 식별됩니다. ps 보고서에 이 스레드에 대한 높은 총계 시간이 표시된다면 다른 스레드가 실행할 준비가 되어 있지 않거나 CPU에서 실행을 위해 대기 중이지 않은 상당한 기간이 있었음을 의미합니다. 따라서 시스템은 새 태스크에 대해 대부분 유휴대기 중 상태였습니다.

    • wa

      wa 열은 보류 중인 로컬 디스크 입출력 및 NFS 마운트 디스크로 인해 CPU가 유휴 상태였던 시간의 백분율을 자세히 보여줍니다. wait가 실행 중일 때 디스크에 대한 미결 입출력이 하나라도 있을 경우, 시간은 입출력에 대한 대기로 분류됩니다. 프로세스가 비동기식 입출력을 사용하지 않는다면, 디스크에 대한 입출력 요청으로 인해 요청이 완료될 때까지 호출 프로세스가 블록(또는 휴면)됩니다. 프로세스에 대한 입출력 요청이 완료되면 실행 큐에 배치됩니다. 입출력이 더 빨리 완료된 경우, 더 많은 CPU 시간이 사용될 수 있습니다.

      wa 값이 25%를 초과한다면 디스크 서브시스템이 올바르게 균형을 이루지 않았거나, 디스크 집약 워크로드의 결과일 수 있습니다.

      wa에 대한 변경사항에 대한 정보는 입출력 대기 시간 보고의 내용을 참조하십시오.

  • kthr

    샘플링 간격 동안 초당 평균으로 계산된 다양한 큐에 있는 커널 스레드 수입니다. kthr 열은 다음과 같습니다.

    • r

      실행 가능한 커널 스레드의 평균 개수입니다. 여기에는 실행 중인 스레드와 CPU 대기 중인 스레드가 포함됩니다. 이 수가 CPU 수보다 클 경우, CPU를 대기 중인 스레드가 적어도 한 개 있는 것입니다. CPU를 대기 중인 스레드가 많을수록 성능 영향의 가능성이 커집니다.

    • b

      VMM 대기 큐에 있는 커널 스레드의 초당 평균 개수입니다. 여기에는 파일 시스템 입출력 시 대기 중인 스레드와 메모리 로드 제어로 인해 일시 중단된 스레드가 포함됩니다.

      메모리 로드 제어로 인해 프로세스가 일시 중단된 경우, vmstat 보고서의 블록된 열(b)은 실행 큐가 아닌 스레드 수의 증가를 나타냅니다.

    • p

      vmstat -I의 경우에 해당합니다. 원시 장치에 대한 입출력을 대기 중인 스레드의 초당 평균 개수입니다. 파일 시스템에 대한 입출력을 대기 중인 스레드는 여기에 포함되지 않습니다.

  • faults

    트랩 및 인터럽트 비율 등 프로세스 제어에 대한 정보입니다. fault 열은 다음과 같습니다.

    • in

      간격 동안에 관찰된 초당 장치 인터럽트 수입니다. 추가 정보는 vmstat 명령을 사용하여 디스크 성능 평가에서 찾을 수 있습니다.

    • sy

      간격 동안에 관찰된 초당 시스템 호출 수입니다. 사용자 프로세스는 잘 정의된 시스템 호출을 통해 자원을 사용할 수 있습니다. 이러한 호출을 통해 커널은 호출 프로세스에 대한 조작을 수행하고 커널과 프로세스 간에 데이터를 교환할 수 있습니다. 워크로드와 애플리케이션은 다양하고 호출마다 서로 다른 기능을 수행하므로, 초당 얼마의 시스템 호출이 너무 많은 것인지를 정의하는 것은 불가능합니다. 그러나 일반적으로, sy 열에서 단일프로세스에 대해 초당 10000개의 호출이 발생할 때, 추가 조사가 요구됩니다. SMP 시스템의 경우 1개의 프로세서에 대한 초당 호출 수는 10000개입니다. 하나의 원인은 select() 서브루틴과 같은 "폴링" 서브루틴일 수 있습니다. 이 열의 경우, 정상 sy 값에 대한 개수를 제공하는 기준선 측정을 사용하는 것이 좋습니다.

    • cs

      간격 동안에 관찰된 초당 문맥 전환 횟수입니다. 물리적 CPU 자원은 각각 10 밀리초의 논리적 시분할로 나누어집니다. 스레드 실행이 스케줄링된 경우, 시분할이 만료되거나, 점유되거나, CPU 제어를 자발적으로 포기할 때까지 실행됩니다. 다른 스레드가 CPU를 제어하게 된 경우, 이전 스레드의 문맥 또는 작업 환경은 저장하고, 현재 스레드의 문맥을 로드해야 합니다. 운영 체제는 매우 효율적인 문맥 전환 프로시저를 제공하므로, 각각의 전환은 자원의 관점에서 비용이 저렴합니다. cs가 디스크 입출력 및 네트워크 패킷 비율보다 훨씬 높을 때와 같이, 문맥 전환이 현저히 증가할 경우 추가 조사를 수행해야 합니다.