인프라 관점의 성능 최적화

category 백엔드/성능 최적화 2022. 3. 30. 16:30
728x90
반응형

성능 최적화

인프라 관점

서버에 과부하가 걸리게되면 소프트웨어로 해결하는데는 어느정도 한계가 있다. 그렇기때문에 그 다음 순으로 물리적인 인프라를 증설하는 방법을 강구해야한다.
그렇다면 어느 시점에 어느 타이밍에 인프라를 증설하는게 맞는 것일까? 하는 물음이 생기게 된다. 정답은 없지만 임계치를 정하고 개념을 알아야 대응이 가능하다.

 

CPU

CPU가 100%가 차지하게되어 서버를 증설하려고하면 늦어도 한참 늦는다. 
그럴 경우 이미 어플리케이션이나 데이터베이스등은 제대로 동작을 하지 않을 시점으로 장애가 발생한 후이다.
일반적으로 70~80% 까지 임계치를 설정해두고 20% 정도는 항상 여유를 남겨놓아 시간적 여유를 두어 증설할 수 있다.

 

MEM

Java와 같은 어플리케이션일 경우 JVM 메모리 제한을 설정하여 기동을 하기때문에 어느정도 대응은 할 수 있으나 Python 등과 같이 다른 언어의 어플리케이션일 경우 대응을 하기 어려울 수 있다.
피크 타임시에 메모리가 얼마나 사용되느냐를 항상 모니터링 해놓아야한다.
리눅스의 경우 보통 스와핑 공간을 설정해 놓는데 실제 메모리를 사용하는 것이 아닌 디스크 공간에 메모리 내용을 덤프하여 사용하게 되므로 성능이 급격하게 떨어지게된다.
만약 어플리케이션이 스와핑 공간을 사용하게 될 경우 메모리를 증설하거나 사용량을 줄이는 방법을 고려하는 것이 필요하다.

 

Disk

시나리오, 로그를 저장하는 모듈 데이터베이스와 같은 파일 시스템을 요구하는 시스템에서 많이 발생한다.
Ganglia 와 같은 도구를 사용하면 IOPS (Input Out Per Second: 초당 읽기/쓰기 등의 IO 발생 횟수)를 통해서 모니터링이 가능하다.
iostat, sar 명령어로 디스크 I/O 지연도 확인 할 수 있다.
모니터링을 통하여 디스크 자체를 SSD로 변경하거나 버퍼가 큰 RPM이 높은 디스크로 변경하는 방식이 있다. 
또는 RAID를 통하여 여러 디스크로 분산 시키는 방식도 있다.

 

NetWork

Cacti, Ganglia 와 같은 RRD 도구를 사용하여 모니터링 해 볼 수 있다.
사용 그래프 추이를 지켜보면서 부하를 넣으면 일정 수준이 되어도 CPU나 메모리, 디스크 등의 기타 자원들은 넉넉한데 
네트워크 입력/출력이 일정 수준 이상으로 올라가지 않는 경우가 있으면 네트워크 구간의 병목을 의심할 필요가 있다.
이미지와 정적 콘텐츠는 될 수 있으면 CDN이나 분리된 웹 서버를 이용해 서비스 하는 것이 좋다.

728x90
반응형