SantaBPF / santabpf

MIT License
6 stars 1 forks source link

서비스 성능 향상을 위한 서버 부하 및 리소스 모니터링 방법 #14

Open whitejh opened 3 years ago

whitejh commented 3 years ago

=================================================================================== 출처

대용량 데이터 서비스를 운영하기 위해서는 서버 부하의 원인을 파악하고, 이를 해결할 수 있어야한다.

  1. 성능, 부하란 무엇인가

    • 웹 어플리케이션에서 부하분산이 많은 경우는 '디스크 I/O를 분산하고 경감시키는' 작업이다.
    • I/O가 OS에 의해 어떻게 처리되는지 이해해야한다.
    • OS는 I/O를 경감시키기 위해 캐시 구조를 사용하게 된다. 캐시가 가장 효율적으로 동작할 수 있도록, 시스템을 구성하는 것이 I/O 분산의 핵심이다.
  2. 병목을 규명하기 위한 작업

=================================================================================== monitor

  1. CPU 부하가 높은 경우 사용자의 프로그램의 처리가 병목인지, 시스템의 프로그램이 원인인지 확인

  2. I/O 부하가 높은 경우 일반적으로 프로그램으로부터 입출력이 많아서 부하가 높거나, 스왑이 발생해서 디스크 액세스가 발생하고 있는 상황인 경우가 많다.

Identify and analysis

  1. CPU 부하가 높은 경우

top, sar과 같은 명령어 이용

  1. I/O 부하가 높은 경우

sar, vmstat을 이용해 문제를 파악

suggest

  1. CPU 부하가 높은 경우

ps 명령어로 볼 수 있는 프로세스 상태나 CPU 사용시간 등을 보면서 원인이 되고 있는 프로세스를 찾는다. 프로세스를 찾은 후, 보다 상세하게 조사할 경우는 strace 명령어로 추적하거나 oprofile로 프로파일링해서 병목지점을 좁혀나간다.

  1. I/O 부하가 높은 경우

(ex1) 스왑이 발생하는 경우

(ex2) 스왑이 발생하지 않고, 디스크로의 입출력이 빈번하게 발생하고 있는 상황 캐시에 필요한 메모리가 부족한 경우로 생각해 볼 수 있다. 해당 서버가 저장하고 있는 데이터 용량과 증설 가능한 메모리량을 비교해서 다음과 같이 나눠서 검토한다.

물론, 프로그램을 개선해서 I/O를 빈도를 줄이는 것도 검토가능하다.

dongho-jung commented 3 years ago

이 이슈에서 다루고 있는 시나리오는 크게 cpu bound job이냐 io bound job이냐로 구분한거 같아요.

monitor, troubleshoot, suggest 각 단계에서 두가지 경우로 나눠 정리해주셨는데 각각이 개별적인 시나리오로 들어가도 괜찮을것 같습니다.

요약의 요약인지라 이것만으로는 완결성 있는 시나리오가 나오긴 어려울것 같고 이후 시나리오들을 리서치하거나 검증할때 참고하기 좋을것 같아요!

저도 처음에 I/O 부하가 높은데 페이지캐시의 존재를 몰라서 삽질을 했었거든요. 캐시의 존재를 항상 유의하고 시나리오 검증을 하면 도움이 많이 되겠네요.