또이리의 Server Engineer

우분투 스트레스 테스트 - 모니터링 본문

Linux Engineer

우분투 스트레스 테스트 - 모니터링

또이리 2020. 11. 11. 23:53

우분투 스트레스 테스트 - 모니터링

Linux stress tset 오늘 스토리는 리눅스 OS 부하 테스트입니다. 추가적으로 시스템의 사용 및 활동 상태를 간단하게 확인할 수 있는 mpstat, vmstat 명령어도 알아보겠습니다.

 

Linux stress

 

레드햇 계열.

stress 설치를 위해 EPEL 레포지터리를 활성화합니다.

[root@Localhost ~]# yum install epel-release

[root@Localhost ~]# yum install stress

 

데비안 계열.

저는 우분투를 애용하니, 데비안 계열의 우분투로 설명드리겠습니다.

[root@Localhost ~]# apt-get install stress

ubuntu stress 1

사용방법과 옵션.

ubuntu stress 2

CPU

Stress -c <코어수> - 지정한 코어를 100% 사용하도록 합니다.

ex) stress -c 4

 

- 작업창을 한 개 더 열어서 top 명령어를 실행하고 숫자 1을 누르시면 코어 수를 확인할 수 있습니다. stress 프로그램으로 코어의 수를 지정하면, 정확하게 지정한 코어 수는 % CPU 목록에 100% 사용을 확인할 수 있습니다.

 

Memory

stress --vm <프로세스 개수> --vm-bytes <사용할 크기> - 메모리 로드를 위해 프로세스의 수와, 사용할 메모리의 크기를 설정합니다.

ex) stress --vm 2 --vm-bytes 2048m

 

- memory load를 위해 2개의 process와  2048MB의 메모리를 사용합니다. 정상적으로 진행되지 않는다면, 로드하려는 메모리의 크기를 너무 과하게 설정된 경우일 수 있습니다.

 

HDD

stress --hdd --hdd-bytes <사용할 크기> - 하드 디스크 로드를 위한 프로세스의 수와 테스트 파일의 크기를 지정합니다.

ex) stress --hdd 2 --hdd-bytes 1024m

 

-hard disk load를 위해서 2개의 process와 1024MB 용량의 파일을 사용합니다.

 

Test all

ex) stress -c 4 --vm 3 --vm-bytes 2048m --hdd 2 --hdd-bytes 1024m --timeout 60s

 

ETC Option

-t N, --timeout N - N초간 테스트 진행, 시간을 지정하지 않을 시에는 취소할 때까지 계속 진행됩니다.

Info stress - stress 명령어의 더 자세한 사용법을 볼 수 있습니다.

 

간단하게 ubuntu에서 시스템에 부하를 줄 수 있는 stress test에 대해서 알아보았습니다.

그러면 이번에는 CPU, MEM, I/O, Network 등의 디바이스가 얼마나 사용되고, 활동하고 있는지 알아보는 명령어를 설명해드리겠습니다.

 

Ubuntu mpstat, vmstat

우선적으로 sysstat를 설치합니다. mpstat와 vmstat를 사용하기 위함입니다.(sar와 iostat 포함)

apt-get install sysstat를 입력하여 sysstat를 설치해보겠습니다.

ubuntu sysstat 1

sysstat가 설치되었다면, 다음과 같은 명령어를 사용할 수 있습니다.

 

mpstat

이 명령어는 CPU 사용률과 시간 백분율을 CPU 개별로 모니터링할 수 있습니다. 이 명령어를 사용하면 각 CPU 별로 균형 및 불균형한 상태를 확인할 수 있습니다.

 

예를 들어 CPU 코어나 쓰레드스레드 중에서 특정 CPU만 job을 진행하고 있다던지 idle(유휴) 상태의 코어나 스레드들을 확인할 수 있습니다.

mpstat 1

위와 같이 mpstat만 입력했을 경우, 명령어 입력시간 기준으로 정보만 출력되고 종료가 됩니다.

 

추가적으로 그다음 명령어 mpstat뒤에 숫자 1을 붙이게 되면 종료시키기 전까지 1초마다 정보를 업데이트해서 화면에 출력해 줍니다. 실시간으로 CPU의 상태를 모니터링할 수 있습니다.

 

다음은 확장 옵션을 추가하겠습니다.

mpstat -P ALL이라고 입력합니다.

mpstat 2

이전 사진과 무엇이 다른지 살펴보겠습니다. CPU 목록에 all 아래 0과 1이 생겼습니다. 4 코어면 0번부터 3번까지가 한 번에 표시가 될 것입니다.

 

4 코어에 하이퍼쓰레딩이 활성화되어있다면 8 스레드가 작동해서 한 번에 0번부터 7번까지의 정보가 표시되겠습니다. 이렇게 한 번에 전체 CPU 개별 코어와 스레드 상태를 확인할 수 있습니다.

 

당연히 마지막에 숫자 1이라는 옵션을 추가하면 1초마다 모니터링을 할 수 있습니다.

 

% usr - 사용자 레벨(애플리케이션)에서 사용

% nice - nice 우선순위 사용자 레벨에서 사용

% sys - 시스템 레벨(커널)에서 사용

% iowait - I/O 처리를 위해 기다린 CPU 시간 백분율

% irq - H/W 인터럽트 서비스 사용

% soft - S/W 인터럽트 서비스 사용

% steal - 하이퍼바이저가 다른 가상 프로세서 서비스를 기다린 CPU 시간 백분율

% guest - 가상 프로세서 실행 사용

% idle - 유휴 한 CPU 시간 백분율

 

vmstat

vmstat는 프로세스, 메모리, 페이징, I/O, CPU의 활동 정보를 살펴볼 수 있습니다.

vmstat에서 중요한 것은 procs 영역의 b 필드입니다. b 필드의 수치가 높은 경우 I/O 작업을 위해 CPU가 계속해서 대기 상태로 있는 경우입니다.

 

이 경우에는 disk I/O 문제를 의심해 볼 필요가 있습니다. 추가로 swap out(so)이 지속적으로 발생한다면, 메모리가 부족을 의심할 수 있습니다. 하지만 일정한 간격으로 스왑 아웃이 발생하는 것은 정상적이며, 스왑 아웃(so) 필드는 항상 0에 가까워야 합니다.

vmstat

자 이제 뒤에 숫자 1 옵션은 초당 모니터링하는 옵션이라는 것은 아실 거라고 생각합니다.

각 필드에 대해 설명하겠습니다.

 

procs

r : cpu 접근 대기 중인 실행 가능한 프로세스의 수

b : I/O 자원을 할당받지 못해서 블락된 프로세스의 수

 

memory

swpd : 사용된 가상 메모리의 용량

free : 사용 가능한 메모리의 용량

buff : 버퍼에 사용된 메모리의 용량

cache : 페이지 캐시에 사용된 메모리의 용량

 

swap

si : swap-in 된 메모리의 양 (kb)

so : swap-out 된 메모리의 양 (kb)

위에서 설명드렸듯이, 스왑 아웃이 지속적으로 발생하면 메모리 부족을 의심해 볼 수 있습니다.

 

I/O

bi: 블록 디바이스로부터 입력 블록수

bo: 블록 디바이스로부터 출력 블록수

 

system

in : 초당 발생한 interrupts의 수

cs : 초당 발생한 context switches(문맥 교환) 수

 

CPU

us : CPU가 사용자 레벨 코드를 실행한 시간 백분율(단위%)

sy : CPU가 시스템 레벨 코드를 실행한 시간 백분율(단위%)

id : idle time 시간 백분율(단위%)

wa : IO wait time 시간 백분율(단위%)

st : steal time 시간 백분율(%)

 

스틸 타임은 저도 이해가 잘 안 돼서 다시 한번  검색해 보았습니다.

CPU Steal Time은 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안에 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값이라고 합니다.

 

가상 환경에서 동작하는 VM(Virtual Machine)은 단일 호스트에 있는 다른 인스턴스와 리소스를 공유합니다. CPU Steal Time을 통해 VM에서 동작하는 CPU가 물리 머신으로부터 자원을 할당받기 위해 얼마나 대기하고 있는지 알 수 있습니다.

 

추가 스토리에 sar와 iostat를 알아보겠습니다.

Comments