클라우드 서비스를 사용하시는 많은 분들이 CPU Steal에 대해 문의합니다. CPU Steal Time은 클라우드 서비스와 물리 서버의 환경 차이에서 발생하는 대표적인 지표입니다. CPU Steal Time이 높아지면 웹 서비스에 장애를 초래하기도 합니다. CPU steal time은 가상화된 자원을 분배하는 과정에서 cpu의 자원을 얼마나 빼앗기고 있는지 알려주는 지표입니다. 그럼 이제 CPU Steal Time에 대해 알아보도록 하겠습니다.
CPU Steal Time은 은 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값입니다. 가상 환경에서 동작하는 VM(Virtual Machine)은 단일 호스트에 있는 다른 인스턴스와 리소스를 공유합니다. CPU Steal Time을 통해 VM에서 동작하는 CPU가 물리 머신으로부터 자원을 할당받기 위해 얼마나 대기하고 있는지 알 수 있습니다.
우선 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 지표를 상시 모니터링하고 있습니다.
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이 발생하는 이유는 VM이 올라가 있는 물리 장비에 자원이 처음부터 부족하거나 아니면 물리 장비에 자원은 충분하지만 VM에 할당된 CPU 자원이 부족하기 때문입니다. VM을 너무 많이 올렸거나 관리자가 VM에서 사용할 수 있는 각각의 리소스 제한 설정을 잘못 한 경우 이런 문제가 발생할 수 있습니다. 또는 물리 장비의 노후화로 인해 호스팅 서비스를 처리하지 못하는 상황일 수도 있습니다.
우선 배치작업과 같이 백그라운드에서 장시간 걸리는 작업의 경우에는 일반적으로 문제가 되지 않습니다. CPU Steal Time은 이런 경우 작업을 중지시키는 요소로 작용하지 않으며, 다른 VM들과 CPU 주기를 공유하는 과정에서 조금 더 느리게 작업이 마무리될 뿐입니다.
하지만 웹 애플리케이션의 경우 문제가 발생할 수 있습니다. 웹 애플리케이션은 고객의 요청에 대한 실시간 처리가 필요합니다. 웹 응답이 이뤄져야 하는 상황에서 Cpu Steal Time이 높아지고, 그로 인해 성능이 감소하게 된다면, 결국 서비스의 실시간 요청사항들이 처리되지 못하면서 서비스에 장애가 발생하게 됩니다.
최종 사용자의 입장에서 Cpu Steal Time이 높은 문제를 직접 해결할 수 있는 방법은 매우 제한적입니다. Cpu Steal Time으로 인해 서비스에 문제가 발생한다면 호스팅 업체를 통해 현재 구매한 VM이 계약에 따른 적절한 리소스를 제공하고 있는지 확인해야 하지만 대부분의 클라우드 서비스 제공사들은 적절하게 제공하고 있다고 답변할 것입니다. Cpu Steal Time이 서비스에 영향을 미치고 있다면 우리는 아래의 2가지 방법 중 하나를 취해야 합니다.
클라우드를 사용하면서 모니터링을 게을리하면 안 됩니다. 개발자, 운영자 아니면 기획자일지라도 문제가 발생했을 경우 원인을 분석할 도구를 마련해야 합니다. 그리고 클라우드 전문 업체 또는 전문가와 연결할 수 있는 핫라인을 항시 만들어 놓기를 바랍니다.