Linux에서 vmstat 명령을 사용하는 방법

Linux 또는 macOS 컴퓨터가 가상 메모리를 사용하고 있습니다. 이것이 시스템의 물리적 메모리, CPU 및 하드 디스크 리소스 사용에 어떤 영향을 미치는지 알아보십시오.

가상 메모리란 무엇입니까?

귀하의 컴퓨터에는 랜덤 액세스 메모리 (램). 이 RAM은 커널에서 관리하고 운영 체제와 실행 중인 모든 응용 프로그램 간에 공유해야 합니다. 이러한 결합된 요구 사항이 컴퓨터에 물리적으로 설치된 것보다 더 많은 메모리를 요구하는 경우 커널은 무엇을 할 수 있습니까?

macOS와 같은 Linux 및 Unix 계열 운영 체제는 하드 디스크의 공간을 사용하여 메모리 요구 사항을 관리할 수 있습니다. “스왑 공간”이라는 하드 드라이브 공간의 예약된 영역은 RAM의 확장인 것처럼 사용할 수 있습니다. 이것은 가상 메모리입니다.

Linux 커널은 메모리 블록의 내용을 스왑 공간에 쓰고 다른 프로세스에서 사용할 수 있도록 RAM 영역을 비울 수 있습니다. 스왑 아웃(“페이지 아웃”이라고도 함) 메모리는 스왑 공간에서 검색하고 필요할 때 RAM으로 복원할 수 있습니다.

물론 페이지 아웃된 메모리에 대한 액세스 속도는 RAM에 저장된 메모리보다 느립니다. 그리고 그것이 유일한 트레이드 오프는 아닙니다. 가상 메모리는 Linux가 메모리 요구를 관리하는 방법을 제공하지만 가상 메모리를 사용하면 컴퓨터의 다른 부분에 부담이 증가합니다.

하드 드라이브는 더 많은 읽기 및 쓰기를 수행해야 합니다. 커널(따라서 CPU)은 메모리를 교체하고, 메모리를 교체하고, 다른 프로세스의 메모리 요구 사항을 충족하기 위해 모든 플레이트를 계속 회전하면서 더 많은 작업을 수행해야 합니다.

Linux는 vmstat 명령의 형태로 이 모든 활동을 모니터링할 수 있는 방법을 제공합니다. 가상 메모리 통계.

vmstat 명령

매개변수 없이 명령으로 vmstat를 입력하면 값 세트가 표시됩니다. 이 값은 컴퓨터가 마지막으로 재부팅된 이후의 각 통계에 대한 평균입니다. 이 수치는 “지금 당장” 값의 스냅샷이 아닙니다.

vmstat

짧은 값 테이블이 표시됩니다.

Procs, Memory, Swap, IO, System 및 CPU라는 열이 있습니다. 마지막 열(가장 오른쪽 열)에는 CPU와 관련된 데이터가 포함됩니다.

다음은 각 열의 데이터 항목 목록입니다.

진행

r: 실행 가능한 프로세스의 수. 이들은 시작되어 실행 중이거나 CPU 주기의 다음 시간 분할 버스트를 기다리는 프로세스입니다.
b: 무정전 휴면 상태의 프로세스 수. 프로세스는 잠자기 상태가 아니며 차단 시스템 호출을 수행하고 있으며 현재 작업을 완료할 때까지 중단될 수 없습니다. 일반적으로 프로세스는 일부 리소스가 해제되기를 기다리는 장치 드라이버입니다. 해당 프로세스에 대해 대기 중인 인터럽트는 프로세스가 일반적인 활동을 재개할 때 처리됩니다.

  Google 크롬을 로컬 파일용 음악 플레이어로 사용하는 3가지 방법

메모리

swpd: 사용된 가상 메모리의 양. 즉, 얼마나 많은 메모리가 스왑 아웃되었는지.,
free: 유휴(현재 사용되지 않는) 메모리의 양.
버프: 버퍼로 사용되는 메모리의 양.
캐시: 캐시로 사용되는 메모리의 양.

교환

si: 스왑 공간에서 스왑된 가상 메모리의 양.
so: 스왑 공간으로 스왑 아웃된 가상 메모리의 양입니다.

IO

bi: 블록 장치로부터 받은 블록. 가상 메모리를 RAM으로 다시 스왑하는 데 사용되는 데이터 블록의 수입니다.
bo: 블록 장치로 전송된 블록. 가상 메모리를 RAM에서 스왑 공간으로 스왑하는 데 사용되는 데이터 블록의 수입니다.

체계

in: 클럭을 포함한 초당 인터럽트 수.
cs: 초당 컨텍스트 전환 수입니다. 컨텍스트 전환은 커널이 시스템 모드 처리에서 사용자 모드 처리로 전환할 때입니다.

CPU

이 값은 모두 총 CPU 시간의 백분율입니다.

us: 커널이 아닌 코드를 실행하는 데 소요된 시간. 즉, 사용자 시간 처리와 좋은 시간 처리에 소요되는 시간입니다.
sy: 커널 코드를 실행하는 데 소요된 시간.
id: 유휴 상태로 보낸 시간.
wa: 입력 또는 출력을 기다리는 데 소요된 시간.
st: 가상 머신에서 도난당한 시간. 이것은 가상 머신이 하이퍼바이저가 이 가상 머신으로 돌아와서 처리하기 전에 다른 가상 머신 서비스를 완료할 때까지 기다려야 하는 시간입니다.

시간 간격 사용

지연 값을 사용하여 vmstat가 이러한 수치에 대한 정기적인 업데이트를 제공하도록 할 수 있습니다. 지연 값은 초 단위로 제공됩니다. 통계가 5초마다 업데이트되도록 하려면 다음 명령을 사용합니다.

vmstat 5

5초마다 vmstat는 테이블에 다른 데이터 행을 추가합니다. 이를 중지하려면 Ctrl+C를 눌러야 합니다.

카운트 값 사용

너무 낮은 지연 값을 사용하면 시스템에 추가적인 부담이 됩니다. 문제 진단을 위해 빠른 업데이트가 필요한 경우 지연 값과 함께 카운트 값을 사용하는 것이 좋습니다.

count 값은 vmstat가 종료되기 전에 수행할 업데이트 수를 알려주고 명령 프롬프트로 돌아갑니다. count 값을 제공하지 않으면 Ctrl+C로 중지될 때까지 vmstat가 실행됩니다.

vmstat가 5초마다 업데이트를 제공하도록 하려면(4개의 업데이트에 대해서만) 다음 명령을 사용합니다.

vmstat 5 4

네 번의 업데이트 후에 vmstat는 저절로 중지됩니다.

  Dropbox에서 충돌하는 파일을 찾는 방법

단위 변경

-S(단위 문자) 옵션을 사용하여 메모리 및 스왑 통계를 킬로바이트 또는 메가바이트로 표시하도록 선택할 수 있습니다. 그 뒤에 k , K , m 또는 M 중 하나가 와야 합니다. 이는 다음을 나타냅니다.

k:1000바이트
K: 1024바이트
m: 1000000바이트
M: 1048576바이트

메모리 및 스왑 통계를 메가바이트 단위로 표시하여 10초마다 통계를 업데이트하려면 다음 명령을 사용하십시오.

vmstat 10 -S M

이제 메모리 및 스왑 통계가 메가바이트 단위로 표시됩니다. -S 옵션은 IO 블록 통계에 영향을 미치지 않습니다. 이들은 항상 블록으로 표시됩니다.

활성 및 비활성 메모리

-a(활성) 옵션을 사용하면 버프 및 캐시 메모리 열이 “inact” 및 “active” 열로 대체됩니다. 그들이 제안하는 것처럼, 이것들은 비활성 및 활성 메모리의 양을 보여줍니다.

버프 및 캐시 열 대신 이 두 열을 보려면 다음과 같이 -a 옵션을 포함합니다.

vmstat 5 -a -S M

비활성 열과 활성 열은 -S(단위 문자) 옵션의 영향을 받습니다.

포크

-f 스위치는 컴퓨터가 부팅된 이후 발생한 포크 수를 표시합니다.

다시 말해, 시스템이 부팅된 이후 시작된(대부분의 경우 다시 닫힌) 작업의 수를 보여줍니다. 명령줄에서 시작된 모든 프로세스는 이 수치를 증가시킵니다. 작업이나 프로세스가 새 작업을 생성하거나 복제할 때마다 이 수치가 증가합니다.

vmstat -f

포크 디스플레이가 업데이트되지 않습니다.

Slabinfo 표시

커널에는 운영 체제와 모든 응용 프로그램에 대한 메모리 관리뿐만 아니라 걱정해야 할 자체 메모리 관리가 있습니다.

커널이 처리해야 하는 다양한 유형의 데이터 개체에 대해 계속해서 메모리를 할당 및 할당 해제하고 있다고 상상할 수 있습니다. 이를 가능한 한 효율적으로 만들기 위해 슬래브라는 시스템을 사용합니다. 이것은 캐싱의 한 형태입니다.

특정 유형의 커널 데이터 개체에 할당, 사용 및 더 이상 필요하지 않은 메모리는 메모리가 할당 취소 및 재할당되지 않고 동일한 유형의 다른 데이터 개체에 재사용될 수 있습니다. 슬라브를 커널 자체의 필요에 따라 미리 할당되고 측정하도록 만들어진 RAM 세그먼트로 생각하십시오.

slabs에 대한 통계를 보려면 -m(slabs) 옵션을 사용합니다. sudo를 사용해야 하며 비밀번호를 묻는 메시지가 표시됩니다. 출력이 상당히 길어질 수 있으므로 파이프를 통해 덜 전달합니다.

sudo vmstat -m | less

출력에는 5개의 열이 있습니다. 이것들은:

캐시: 캐시의 이름입니다.
num: 이 캐시에 있는 현재 활성 개체의 수입니다.
total: 이 캐시에서 사용 가능한 총 개체 수입니다.
size: 캐시에 있는 각 개체의 크기입니다.
페이지: 현재 이 캐시와 연결된 (최소한) 하나의 개체가 있는 총 메모리 페이지 수입니다.

  새 Gmail 웹 인터페이스에서 연락처를 찾는 방법

적게 남기려면 q를 누르십시오.

이벤트 카운터 및 메모리 통계 표시

이벤트 카운터 및 메모리 통계 페이지를 표시하려면 -s(통계) 옵션을 사용하십시오. 소문자 “s”입니다.

vmstat -s

보고되는 통계는 기본 vmstat 출력을 구성하는 정보와 거의 동일하지만 일부는 더 자세히 분할되어 있습니다.

예를 들어 기본 출력은 nice 및 non-nice 사용자 CPU 시간을 모두 “us” 열에 결합합니다. -s(통계) 표시는 이러한 통계를 별도로 나열합니다.

디스크 통계 표시

-d(디스크) 옵션을 사용하여 유사한 디스크 통계 목록을 얻을 수 있습니다.

vmstat -d | less

각 디스크에 대해 읽기, 쓰기 및 IO라는 세 개의 열이 표시됩니다.

IO는 맨 오른쪽 열입니다. IO의 sec 열은 초 단위로 측정되지만 읽기 및 쓰기 열의 시간 기반 통계는 밀리초 단위로 측정됩니다.

열의 의미는 다음과 같습니다.

읽기

total: 디스크 읽기의 총 수입니다.
병합됨: 그룹화된 읽기의 총 수입니다.
섹터: 읽은 섹터의 총 수입니다.
ms: 디스크에서 데이터를 읽는 데 사용된 총 시간(밀리초)입니다.

씁니다

total: 디스크 쓰기의 총 수입니다.
병합됨: 그룹화된 쓰기의 총 수입니다.
섹터: 쓰여진 섹터의 총 수.
ms = 디스크에 데이터를 쓰는 데 사용된 총 시간(밀리초)입니다.

IO

cur: 현재 디스크 읽기 또는 쓰기 수입니다.
초: 진행 중인 읽기 또는 쓰기에 소요된 시간(초)입니다.

요약 디스크 통계 표시

디스크 활동에 대한 요약 통계의 빠른 표시를 보려면 -D(디스크 합계) 옵션을 사용하십시오. 대문자 “D”에 유의하십시오.

vmstat -D

디스크 수가 비정상적으로 많아 보일 수 있습니다. 이 기사를 연구하는 데 사용된 컴퓨터는 Ubuntu를 실행하고 있습니다. Ubuntu를 사용하면 Snap에서 애플리케이션을 설치할 때마다 /dev/loop 장치에 연결된 squashfs 의사 파일 시스템이 생성됩니다.

짜증나게도 이러한 장치 항목은 많은 Linux 명령 및 유틸리티에서 하드 드라이브 장치로 간주됩니다.

파티션 통계 표시

특정 파티션과 관련된 통계를 보려면 -p(파티션) 옵션을 사용하고 파티션 식별자를 명령줄 매개변수로 제공합니다.

여기서는 sda1 파티션을 살펴보겠습니다. 숫자 1은 이것이 이 컴퓨터의 기본 하드 드라이브인 장치 sda의 첫 번째 파티션임을 나타냅니다.

vmstat -p sda1

반환된 정보는 해당 파티션에 대한 총 디스크 읽기 및 디스크 쓰기 수와 디스크 읽기 및 디스크 쓰기 작업에 포함된 섹터 수를 보여줍니다.

후드 아래 엿보기

후드를 들어올리는 방법과 그 아래에서 무슨 일이 일어나고 있는지 아는 것은 항상 좋은 일입니다. 때때로 당신은 문제 해결을 시도할 것이고, 때로는 당신의 컴퓨터가 어떻게 돌아가는지 알고 싶기 때문에 흥미가 없을 것입니다.

vmstat는 많은 유용한 정보를 제공할 수 있습니다. 이제 액세스 방법과 의미를 알았습니다. 그리고 미리 경고합니다. 팔을 걷어붙이고 진단을 수행해야 할 때 vmstat가 있다는 것을 알게 될 것입니다.