-
Notifications
You must be signed in to change notification settings - Fork 1
Description
- 시나리오 구상 (how가 아니라 what 위주로)
- monitor: 해당 이슈가 발생했다는 사실을 어떻게 탐지할 것인지
- identify: 해당 이슈가 어디서 발생했고 시스템에 어떤 영향을 얼마나 끼치고 있는지를 어떻게 식별할 것인지
- analysis: 해당 이슈가 왜 발생했는지를 어떻게 분석할 것인지
- suggest: 해당 이슈에 대한 솔루션을 어떻게 제안할 것인지
- 위에서 구상한 시나리오들 하나씩 구현
===================================================================================
출처
대용량 데이터 서비스를 운영하기 위해서는 서버 부하의 원인을 파악하고, 이를 해결할 수 있어야한다.
- 성능, 부하란 무엇인가
- 웹 어플리케이션에서 부하분산이 많은 경우는 '디스크 I/O를 분산하고 경감시키는' 작업이다.
- I/O가 OS에 의해 어떻게 처리되는지 이해해야한다.
- OS는 I/O를 경감시키기 위해 캐시 구조를 사용하게 된다. 캐시가 가장 효율적으로 동작할 수 있도록, 시스템을 구성하는 것이 I/O 분산의 핵심이다.
- 병목을 규명하기 위한 작업
-
- Load Average 확인
-
- CPU, I/O 중 병목 원인 조사
-
Load Average가 높은 경우, 다음으로 CPU와 I/O 어느 쪽에 원인이 있는지를 조사해야한다.
-
참고 : sar, vmstat으로 시간 경과에 따라 CPU 사용률이나 I/O 대기율이 추이를 확인할 수 있다.
===================================================================================
monitor
-
CPU 부하가 높은 경우
사용자의 프로그램의 처리가 병목인지, 시스템의 프로그램이 원인인지 확인 -
I/O 부하가 높은 경우
일반적으로 프로그램으로부터 입출력이 많아서 부하가 높거나, 스왑이 발생해서
디스크 액세스가 발생하고 있는 상황인 경우가 많다.
Identify and analysis
- CPU 부하가 높은 경우
top, sar과 같은 명령어 이용
- I/O 부하가 높은 경우
sar, vmstat을 이용해 문제를 파악
suggest
- CPU 부하가 높은 경우
ps 명령어로 볼 수 있는 프로세스 상태나 CPU 사용시간 등을 보면서 원인이 되고 있는 프로세스를 찾는다.
프로세스를 찾은 후, 보다 상세하게 조사할 경우는 strace 명령어로 추적하거나 oprofile로 프로파일링해서 병목지점을 좁혀나간다.
- I/O 부하가 높은 경우
(ex1) 스왑이 발생하는 경우
-
- 특정 프로세스가 극단적으로 메모리를 소비하고 있지 않는지 ps 명령어로 확인할 수 있다.
-
- 프로그램 오류로 메모리를 지나치게 사용하는 경우, 프로그램을 개선한다.
-
- 탑재된 메모리가 부족한 경우에는 메모리를 증설한다. 메모리를 증설할 수 없는 경우에는 분산을 검토한다.
(ex2) 스왑이 발생하지 않고, 디스크로의 입출력이 빈번하게 발생하고 있는 상황
캐시에 필요한 메모리가 부족한 경우로 생각해 볼 수 있다. 해당 서버가 저장하고 있는 데이터 용량과 증설 가능한 메모리량을 비교해서 다음과 같이 나눠서 검토한다.
-
- 메모리 증설로 캐시영역을 확대시킬 수 있는 경우는 메모리를 증설한다.
-
- 메모리 증설로 대응할 수 없는 경우는 데이터 분산이나 캐시서버 도입 등을 검토한다.
물론, 프로그램을 개선해서 I/O를 빈도를 줄이는 것도 검토가능하다.