1. 모니터링 도구와 프로파일링 도구
- 부하 테스트를 실행할 때는 Throughput 모니터링 도구와 시 각화 도구가 필수적입니다.
- 그러나 프로파일링 도구를 활용하면 부하 테스트를 하게 되면 프로파일링 도구의 응답 시간에 영향을 주어 시스템의 실제 성능을 왜곡할 수 있습니다.
- 이러한 문제를 해결하기 위해 다음과 같은 접근 방식이 필요합니다.
1.1 주요 모니터링 도구
시스템 모니터링을 위한 핵심 도구들:
- top 명령어와 netstat 명령어
- AWS 관리 콘솔
- Xhprof
- New Relic
2. 리소스 모니터링을 위한 top 명령어
2.1 top 명령어 기본 사용법
- 시스템을 실시간으로 모니터링하기 위한 가장 기본적인 도구인 top 명령어는 시스템 전체와 프로세스별 CPU와 메모리 사용량 등을 볼 수 있어 부하 테스트 시에 유용하게 사용됩니다.
$ top
top - 03:17:50 up 197 days, 18:54, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 234 total, 1 running, 233 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4049868k total, 2470912k used, 1578956k free, 104832k buffers
2.2 CPU 사용률 분석
- 사용자 프로세스 CPU 사용률(us): 0.2%us는 '사용자 프로세스 CPU 사용률(0.2%)'을 의미
- 시스템 프로세스 CPU 사용률(sy): 0.2%sy는 '시스템 프로세스 CPU 사용률(0.2%)'을 의 미
- 유휴 CPU 비율(id): 시스템의 여유 자원을 나타냄
정보
사용자 프로세스 CPU 사용률은 미들웨어나 애플리케이션 프로그램에 사용되는 CPU 사용률을 의미합니다. 부하 테스트 중 이 수치가 높을 때는 CPU를 애플리케이션에서 사용하고 있는 비율이 높은 것으로 일반적으로 좋은 의미라고 볼 수 있다. 반대로 시스템 프로세스 CPU 사용률이 높은 경우 파일이나 네트워크 입출력 등에 CPU가 사용되고 있는 것으로 볼 수 있다.
2.3 메모리 사용량 모니터링
- 전체 메모리: 4049868k total
- 사용 중인 메모리: 2470912k used
- 가용 메모리: 1578956k free
- 버퍼/캐시: 시스템 성능 향상을 위한 버퍼와 캐시 메모리
3. 네트워크 모니터링을 위한 netstat
3.1 netstat 명령어 활용
- netstat 명령어는 TCP 등 네트워크 통신 상태를 볼 수 있는 핵심 도구입니다.
- 웹 시스템이 고부하 상태일 때는 TCP/IP 통신 부분이 병목 구간인 경우가 많아 이를 확인하는 것이 중요합니다.
$ netstat -nato
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 224 10.0.0.40:22 153.156.43.25:63515 ESTABLISHED on
3.2 TCP 연결 상태 분석
- 부하 테스트 시에 확인할 주요 상태:
- ESTABLISHED: 현재 연결된 상태
- TIME_WAIT: TCP 연결 종료 대기 상태
- LISTEN: 연결 요청 대기 상태
- 여기서 가장 중요한 상태는 TIME_WAIT 상태입니다. 이 상태가 많아지면 TCP 포트가 부족하여 새로운 연결을 받지 못하는 상황이 발생할 수 있습니다.
3.3 리눅스 설정 법
net.ipv4.tcp_tw_reuse
- TIME_WAIT 상태의 포트를 재사용할 수 있도록 설정합니다.
- 해당 값을 1로 설정하면 TIME_WAIT 상태의 포트를 재사용할 수 있습니다.
net.ipv4.tcp_fin_timeout
- FIM_WAIT_2 상태의 타임아웃을 설정합니다.
- 기본값은 60초이며, 이 값을 줄이면 부하가 많을 때 도움이 됩니다.
- 그러나 너무 짧게 하면 문제가 발생할 수 있어 10~30초 정도로 설정하는 것이 좋습니다.