와탭 블로그

전체보기

CPU Steal Time의 원인과 대책

2019년 2월 11일

CPU_Steal_Time&Cloud

클라우드 서비스를 사용하시는 많은 분들이 CPU Steal에 대해 문의합니다. CPU Steal Time은 클라우드 서비스와 물리 서버의 환경 차이에서 발생하는 대표적인 지표입니다. CPU Steal Time이 높아지면 웹 서비스에 장애를 초래하기도 합니다. CPU steal time은 가상화된 자원을 분배하는 과정에서 cpu의 자원을 얼마나 빼앗기고 있는지 알려주는 지표입니다. 그럼 이제 CPU Steal Time에 대해 알아보도록 하겠습니다.

CPU Steal Time

CPU Steal Time은 은 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값입니다. 가상 환경에서 동작하는 VM(Virtual Machine)은 단일 호스트에 있는 다른 인스턴스와 리소스를 공유합니다. CPU Steal Time을 통해 VM에서 동작하는 CPU가 물리 머신으로부터 자원을 할당받기 위해 얼마나 대기하고 있는지 알 수 있습니다.

CPU Steal Time은 어떻게 확인하는가?

우선 Linux에서 top 명령을 실행하면 주요 성능 메트릭의 실시간 보기를 볼 수 있습니다. 아래는 Top 명령어가 실행되었을 때 값입니다.

                                Top - 10:00:00 up 120 days, 7:00, 3 users, load average: 1.15, 0.88, 0.86
                                Tasks: 122 total, 10 running, 112 sleeping, 0 stopped, 0 zombie
                                %Cpu(s): 40.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0,0%hi, 0.1%si, 70.0%st
                            

Top 명령어를 사용하는 경우에는 현재 발생한 지표를 확인할 수 있습니다. 서비스에 문제가 발생하였을 경우 과거의 지표를 확인하고자 한다면 와 탭 인프라 모니터링 서비스와 같은 모니터링 서비스를 사용하여 문제가 발생한 시점의 지표를 확인해야 합니다. 대부분의 모니터링 서비스들은 CPU Steal 지표를 상시 모니터링하고 있습니다.

whatap_infra_cpu_steal
    CPU(s) 항목에 대한 설명은 아래와 같습니다.
  • us(user) : 사용자 어플리케이션(non-kernel code)에 의해 사용되는 CPU 시간 비율
  • sy(system) : 시스템(kernel code)에 의해 사용되는 CPU 시간 비율
  • ni(nice) : NI 값이 1에서 19사이의 사용자 프로세스에 의해 사용되는 CPU 시간 비율
  • id(idle) : CPU 휴식 시간 비율
  • wa(wait) : CPU 사용 대기 시간 비율
  • hi(hard interrupt) : 바로 실행된 인터럽트 핸들러에서 사용한 시간 비율
  • si(soft interrupt) : 대기 후 실행된 인터럽트 핸들러에서 사용한 시간 비율
  • st(steal time) : 가상화 시스템에서 받지 못한(프로세스가 비자발적으로 대기하는 데에 사용한) 시간 비율

CPU Steal Time은 CPU의 맨 마지막 항목을 통해 알 수 있습니다. 실제 가상화 환경이 아닌 경우 CPU Steal Time은 아무런 의미를 갖지 않습니다.

CPU Steal Time이 높은 원인은?

cause_effect

CPU Steal이 발생하는 이유는 VM이 올라가 있는 물리 장비에 자원이 처음부터 부족하거나 아니면 물리 장비에 자원은 충분하지만 VM에 할당된 CPU 자원이 부족하기 때문입니다. VM을 너무 많이 올렸거나 관리자가 VM에서 사용할 수 있는 각각의 리소스 제한 설정을 잘못 한 경우 이런 문제가 발생할 수 있습니다. 또는 물리 장비의 노후화로 인해 호스팅 서비스를 처리하지 못하는 상황일 수도 있습니다.

CPU steal time이 높으면 어떤 상황이 발생하는가.

우선 배치작업과 같이 백그라운드에서 장시간 걸리는 작업의 경우에는 일반적으로 문제가 되지 않습니다. CPU Steal Time은 이런 경우 작업을 중지시키는 요소로 작용하지 않으며, 다른 VM들과 CPU 주기를 공유하는 과정에서 조금 더 느리게 작업이 마무리될 뿐입니다.

하지만 웹 애플리케이션의 경우 문제가 발생할 수 있습니다. 웹 애플리케이션은 고객의 요청에 대한 실시간 처리가 필요합니다. 웹 응답이 이뤄져야 하는 상황에서 Cpu Steal Time이 높아지고, 그로 인해 성능이 감소하게 된다면, 결국 서비스의 실시간 요청사항들이 처리되지 못하면서 서비스에 장애가 발생하게 됩니다.

클라우드 서비스 벤더에서의 문제 해결

problem_solution
  • 리소스의 제한 설정을 조절합니다. 특정 서버에서 실행되는 VM의 자원 사용률에 대한 설정을 조절합니다. 실제로 VM 별 자원 사용률이 관리되고 있지 않다면 일부 높은 자원을 사용하는 VM에 의해 다른 VM들이 피해를 받고 있을 수 있습니다.
  • 하이퍼바이저를 업그레이드합니다. VM의 자원을 적절하게 할당하는 기술이 부족한 하이퍼바이저를 사용하고 있다면 하이퍼바이저를 최신 버전으로 업그레이드하거나 더 좋은 소프트웨어로 교체합니다.
  • 물리 서버의 장비를 업그레이드합니다. 더 많은 처리 성능을 가지 프로세스로 업그레이드하거나 코어를 추가하여 VM에서 사용할 수 있는 자원을 늘립니다.
  • VM을 이전하여 부하를 상쇄합니다. VM의 사용률을 파악하여 자원의 사용률을 평준화 시킵니다. CPU 부하를 많이 사용하는 VM들을 물리적으로 분리하여 CPU의 태스크를 분산시키면 가상 CPU의 로드가 줄어들 수 있습니다.

클라우드를 사용하는 고객의 문제 해결 방법

최종 사용자의 입장에서 Cpu Steal Time이 높은 문제를 직접 해결할 수 있는 방법은 매우 제한적입니다. Cpu Steal Time으로 인해 서비스에 문제가 발생한다면 호스팅 업체를 통해 현재 구매한 VM이 계약에 따른 적절한 리소스를 제공하고 있는지 확인해야 하지만 대부분의 클라우드 서비스 제공사들은 적절하게 제공하고 있다고 답변할 것입니다. Cpu Steal Time이 서비스에 영향을 미치고 있다면 우리는 아래의 2가지 방법 중 하나를 취해야 합니다.

  • 좀 더 강력한 인스턴스를 구매합니다.
  • 다른 인스턴스에 애플리케이션을 재배포 합니다.

마무리

클라우드를 사용하면서 모니터링을 게을리하면 안 됩니다. 당신이 개발자, 운영자 아니면 기획자일지라도 문제가 발생했을 경우 원인을 분석할 도구를 마련해야 합니다. 그리고 클라우드 전문 업체 또는 전문가와 연결할 수 있는 핫라인을 항시 만들어 놓기를 바랍니다.

SaaS형의 장점, 국내 최고의 성능 분석 전문가의 기술 지원을 받고 싶다면?

와탭 무료로 시작하기
<  이전 글

다음 글  >

최신글