Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

시스템 부하 완벽 이해하기: 로드 애버리지(Load Average) 읽고 해석하는 법

2024년 2월 25일에 예시 스크린샷과 오래된 링크를 최신 내용으로 업데이트했습니다.

애플리케이션을 안정적으로 운영하려면 시스템의 부하(load)를 모니터링하는 것이 필수입니다. AppSignal의 호스트 메트릭은 여러 시간대별로 시스템에 걸렸던 부하 평균(load average)을 보여주어 시스템 상태를 한눈에 파악할 수 있게 해줍니다. top, uptime, w 같은 도구로도 이 지표를 확인할 수 있습니다.

그렇다면 '부하 평균'은 정확히 무엇을 의미하고, 이 숫자들은 어떻게 해석해야 할까요? 이 글에서는 시스템 부하의 개념을 정리하고, 부하 평균을 읽는 방법과 효과적인 모니터링 방법까지 소개합니다.

부하 평균(Load Average)이란?

부하 평균은 보통 세 개의 숫자로 표시됩니다. 앞서 본 uptime 출력 결과의 마지막 세 숫자가 바로 그것으로, 각각 직전 1분(0.44), 직전 5분(0.28), 직전 15분(0.25) 동안의 평균 부하를 나타냅니다.

시스템 부하 완벽 이해하기: 로드 애버리지(Load Average) 읽고 해석하는 법

AppSignal에서는 지난 12시간 동안의 부하 평균을 분 단위로, 그 이상의 긴 기간은 시간 단위로 확인할 수 있습니다. Time Detective 기능으로 특정 시점을 자세히 들여다보거나, 호스트 메트릭 대시보드를 통해 여러 호스트를 실시간으로 비교할 수도 있습니다.

시스템 부하(System Load)란?

부하 평균이 무엇을 의미하는지(그리고 언제 경계해야 하는지) 이해하려면 먼저 시스템 부하가 무엇이며 어떻게 측정되는지 알아야 합니다.

시스템 부하는 특정 시점에 활성 상태인 프로세스의 개수입니다.

  • 유휴(idle) 상태일 때 부하는 0입니다.
  • 프로세스가 시작되면 부하는 1 증가합니다.
  • 프로세스가 종료되면 부하는 1 감소합니다.

여기에는 CPU 시간을 기다리는 프로세스도 포함됩니다. 즉, 하나의 프로세스가 CPU를 사용 중이고 두 개의 프로세스가 대기 중이라면 부하는 3입니다.

수명이 짧은 프로세스들 때문에 부하는 매우 빠르게 변동합니다. 몇 밀리초 만에 0에서 5로 치솟았다가 곧바로 다시 떨어질 수 있죠. 이런 변동성 때문에 순간적인 값보다는 일정 시간 동안의 평균 부하를 보는 것이 시스템이 얼마나 바빴는지를 더 명확하게 보여줍니다.

부하 평균 해석하기

시스템 부하가 어떻게 계산되는지 알았으니, 이제 부하 평균을 살펴보겠습니다. 시스템의 부하는 일반적으로 일정 시간에 대한 평균값으로 표시됩니다.

일반적으로 싱글 코어 CPU는 한 번에 하나의 프로세스만 처리할 수 있습니다. 부하 평균이 1.0이라면 해당 코어가 100% 가동 중이라는 뜻입니다. 부하 평균이 0.5로 떨어지면 CPU가 시간의 50% 동안 유휴 상태였다는 의미입니다.

반대로 부하 평균이 1.5로 올라가면, CPU는 계속 바빴고 평균적으로 다른 하나의 프로세스가 시간의 50% 동안 대기하고 있었다는 뜻입니다. 즉, CPU가 감당할 수 있는 것보다 많은 작업이 들어온 상태입니다.

논리 프로세서(Logical Processors)

경험상 부하 평균은 컴퓨터의 프로세서 수를 초과하지 않는 것이 좋습니다. 프로세서가 네 개라면 부하는 일반적으로 4.0 미만을 유지해야 합니다.

단, 여기서 말하는 것은 CPU의 물리적 코어가 아니라 논리 프로세서라는 점에 유의하세요. 하이퍼스레딩(hyper-threading) 같은 소프트웨어 추상화 덕분에 논리 프로세서(처리 스레드)의 수는 물리적 코어 수보다 많을 수 있습니다.

Linux에서 논리 프로세서 수를 확인하려면 /proc/cpuinfo에 나열된 프로세서를 세거나 다음 명령어를 사용하세요.

nproc

이 명령은 프로세서 라인의 개수를 자동으로 출력합니다. macOS에서는 sysctl을 사용해 논리 프로세서 수를 바로 조회할 수 있습니다.

sysctl -n hw.ncpu

논리 프로세서가 여러 개인 시스템은 동시에 더 많은 프로세스를 실행할 수 있으므로 부하 평균이 더 높아질 수 있습니다. 예를 들어 CPU 코어 두 개를 가진 머신에서 부하 평균이 2.0이라면, 두 CPU 모두 100% 활용되었고 평균적으로 두 개의 프로세스가 활성 상태였음을 의미합니다.

👋 Ruby(Rails) 성능 관련 글이 더 궁금하다면 Ruby 성능 모니터링 체크리스트도 함께 확인해 보세요.

부하 평균 읽는 법

부하 평균은 절대적인 프로세스 수의 평균이기 때문에, 어느 정도가 적정한지 언제 위험 신호인지 판단하기 어려워 보일 수 있습니다. 일반적으로 각 CPU 코어는 한 번에 하나의 프로세스를 처리할 수 있으므로, 논리 프로세서당 부하가 1.0을 넘기 전까지는 시스템에 과부하가 걸린 것으로 보지 않습니다. 하이퍼스레딩이 없는 듀얼 코어 시스템이라면 기준은 2.0이 됩니다.

보통 직전 1분 기준으로 코어당 부하 평균이 1.0을 잠시 넘는 것은 큰 문제가 되지 않지만, 5분 또는 15분 평균이 계속 높게 유지된다면 시스템에 문제가 발생했을 가능성을 의심해 봐야 합니다.

AppSignal로 호스트 모니터링하기

부하 평균을 제대로 이해하는 것은 앱을 건강하게 유지하는 핵심입니다. 에러 트래킹(Error Tracking), 이상 감지(Anomaly Detection), 로그 관리(Log Management) 같은 기능을 갖춘 AppSignal은 문제가 커지기 전에 미리 발견하도록 도와줍니다.

강력한 인사이트와 스마트한 알림으로 앱을 모니터링하고 싶다면? 신용카드 등록 없이 30일 무료 체험을 시작해 보세요.

궁금한 점이나 피드백이 있나요? 언제든 알려주세요. 전문가가 모니터링 관련 문의에 답변해 드립니다!