siklog
[Server/tool] 리눅스 서버 부하 테스트 방법 본문
서버는 한정된 자원으로 작동이 되기 때문에 수용 가능한 임계치가 있고 따라서 서버가 잘 동작하는지 테스트 해보는 작업은 중요하며,
이에 따라 갑자기 사용자가 많아지는 상황을 미리 겪어보고 어느 부분이 문제인지 파악하고 해결 방안을 모색하여 적용하기 위해 테스트가 필요하다.
테스트 목적이나 방식에 따라 아래 종류로 구분될 수 있다.
- 테스트 종류
1) 성능 테스트
- 시스템의 요소가 특정 상황에서 어느 정도의 성능을 보이는지를 측정하는 테스트.
2) 부하 테스트
- 임계치의 한계에 도달할 때까지 시스템에 부하를 꾸준히 증가시키며 진행하는 테스트.
3) 스트레스 테스트
- 시스템이 과부하 상태에서 어떻게 작동하는지를 검사하는 테스트.
서버가 잘 동작하는지 확인하는 방법은 여러 가지가 있을 수 있고 각 장비들에 선택적으로 부하를 주어 확인해 볼 수도 있다.
1. 툴을 이용하는 방법
- 가장 일반적으로 많이 사용하는 방식으로 툴을 설치하여 테스트를 할 수 있다.
- 사용법은 아래 help 명령어 옵션 결과를 참고 (stress 툴 명령어 옵션)
CPU
Stress -c <코어수> - 지정한 코어를 100% 사용하도록 한다.
ex) stress -c 4
Memory
stress --vm <프로세스 개수> --vm-bytes <사용할 크기> - 메모리 로드를 위해 프로세스의 수와, 사용할 메모리의 크기를 설정한다.
ex) stress --vm 2 --vm-bytes 2048m
HDD
stress --hdd --hdd-bytes <사용할 크기> - 하드 디스크 로드를 위한 프로세스의 수와 테스트 파일의 크기를 지정한다.
ex) stress --hdd 2 --hdd-bytes 1024m
* 스트레스 옵션을 따로 사용할 수도 있지만 같이 한 줄로 작성하여 사용할 수도 있다.
ex) stress -c 4 --vm 3 --vm-bytes 2048m --hdd 2 --hdd-bytes 1024m --timeout 60s
-> 코어 수 4개 100% 사용, 3개의 process로 각1024M의 메모리를 사용, 2개의 process로 각1024M 크기를 지정한다. / --timeout 60s 이 옵션을 주면 60초간 테스트를 진행
* 만약 자원 재할당으로인해 부하율이 왔다갔다 할 경우 고정적인 로드율 테스트가 어려울 수 있다. 이 경우 --vm-keep 옵션을 사용할 수 있다.
예를들어 메모리 90% 풀 로드를 해야 한다면 아래 형태로 사용할 수 있다.
ex) stress --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
- Top명령어를 실행하여 모니터링 해본 결과 stress 프로세스가 올라온 모습이 보이고 점유율이 올라가 있는 것을 확인해 볼 수 있다.
2. 명령어를 이용한 방법
- 다양한 옵션을 활용하기 위해선 stress와 같은 툴을 이용하는 것이 가장 좋지만 간단한 테스트에선 명령어를 이용하여 부하를 일으키는 방법을 사용할 수도 있다.
yes > /dev/null명령어에 & 를 붙여 코어 수 만큼 입력하면 원하는 만큼 부하를 줄 수 있고, dd if=/dev/zero of=/dev/null 명령어를 통해서 hdd 읽기, 쓰기 테스트 해볼 수 있다.
- 간단하게 테스트를 하고자 할 때 유용하게 사용될 수 있다.
- 테스트 활용
- 모니터링 서비스에 연결하면 지표가 수집이 되고 수집된 지표는 Auto Scaling이나 Load Balancer를 또는 HA 테스트하고자 할 때 해당 부하 테스트 방법을 활용할 수 있다.
- 위 활용 이외에도 네트워크나 i/0 부하를 통해 장비상태를 체크하거나, 장애상황에 대비할 수 있는 테스트를 할 수 있다.