Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스의 높은 CPU 사용률 또는 높은 스틸 시간 문제를 해결하고 싶습니다.
간략한 설명
높은 CPU 사용량은 애플리케이션 수준 활동, 프로비저닝이 부족한 EC2 인스턴스 또는 모니터 불일치로 인해 발생할 수 있습니다. 높은 CPU 사용량 문제를 해결하려면 환경의 스틸 시간 지표를 확인하십시오. CPU 스틸 시간은 인스턴스가 준비되었지만 기본 물리적 리소스가 다른 곳에 할당되어 있어 인스턴스를 진행할 수 없는 시간입니다. 스틸 시간이 길면 애플리케이션 성능에 영향을 미치며 속도 저하, 시간 초과 및 일관성 없는 동작이 발생합니다.
스틸 시간이 길어지는 이유는 다음과 같습니다.
- 동일한 기본 물리적 호스트에 있는 인접 인스턴스의 CPU 요구량이 높습니다.
- 인스턴스 하이퍼바이저에 요청이 오버로드되었습니다.
- 버스트 가능 인스턴스의 CPU 크레딧 밸런스가 소진되었습니다.
참고: Amazon CloudWatch 지표와 인스턴스 수준 도구 지표에는 차이가 있을 수 있습니다. CloudWatch는 하이퍼바이저 수준에서 지표를 수집하지만 인스턴스 도구는 게스트 운영 체제(OS) 내에서 측정하기 때문입니다. 또한 CloudWatch는 1~5분 간격으로 샘플링하므로 인스턴스 도구가 초 단위 데이터를 제공할 수 있습니다. 시간 동기화 및 CPU 사용량 계산 방법으로 인해 불일치가 발생할 수도 있습니다.
해결 방법
Linux 인스턴스의 높은 CPU 사용량 문제를 해결하려면 다음과 같은 문제 해결 작업을 수행하십시오.
구성의 CPU 스틸 시간 측정
구성의 스틸 시간을 보려면 다음 명령을 실행합니다.
top
출력 예시:
top - 14:23:45 up 7 days, 2:03, 1 user, load average: 0.45, 0.50, 0.45
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 2.1 sy, 0.0 ni, 85.6 id, 1.2 wa, 0.0 hi, 0.3 si, 5.5 st
MiB Mem : 3949.2 total, 146.7 free, 1367.8 used, 2434.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2312.8 avail Mem
출력에서 st 값을 확인하여 CPU 스틸 시간의 백분율을 구합니다. 위 예에서 스틸 시간은 전체 CPU 시간의 5.5%를 차지합니다. 스틸 시간을 5% 미만으로 유지하는 것이 가장 좋습니다. 스틸 시간이 지속적으로 10%를 초과하는 경우 인스턴스에 잘못된 구성 문제가 있는지 확인하십시오.
전용 리소스가 필요한 워크로드의 경우 Amazon EC2 전용 호스트를 사용하는 것이 가장 좋습니다.
CloudWatch를 사용하여 CPU 모니터링
CloudWatch를 사용하여 인스턴스 성능을 모니터링합니다. 인스턴스의 CPUUtilization 지표와 t2 및 t3 인스턴스의 CPUCreditUsage 및 CPUCreditBalance 지표를 확인합니다.
CloudWatch 지표와 인스턴스에 표시되는 항목 간에 차이가 있는 경우 CloudWatch 에이전트를 올바르게 구성했는지 확인하십시오. /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log에서 오류를 확인하십시오.
참고: CloudWatch는 기본적으로 스틸 시간 지표를 제공하지 않습니다. 대신 사용자 지정 지표를 추가하도록 CloudWatch 에이전트를 구성해야 합니다.
인스턴스 수준 도구를 사용하여 인스턴스 모니터링
보다 사용자 친화적인 인터페이스로 구성의 스틸 시간을 확인하려면 top 명령 대신 htop를 사용하십시오. htop를 다운로드하려면 GitHub 웹 사이트에서 htop-dev/htop를 참조하십시오.
시간 경과에 따른 메모리, 페이징, I/O 및 CPU와 같은 자세한 시스템 수준 리소스 사용량을 보려면 다음 명령을 실행합니다.
vmstat
출력 예시:
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 150272 97545 2394124 0 0 0 5 1 2 5 2 86 1 6
0 0 0 150272 97545 2394124 0 0 0 0 435 625 4 2 88 0 6
참고: 스틸 시간을 보려면 st 열을 확인하십시오.
리소스에 대한 기록 데이터를 보려면 다음 명령을 실행합니다.
sar
출력 예시:
$ sar -P ALL 1 3
Linux 5.4.0-1045-aws (ip-10-0-1-100) 04/22/2025 _x86_64_ (2 CPU)
4:25:00 CPU %user %nice %system %iowait %steal %idle
14:25:01 all 4.50 0.00 2.00 1.00 5.50 87.00
14:25:01 0 4.00 0.00 2.00 1.00 6.00 87.00
14:25:01 1 5.00 0.00 2.00 1.00 5.00 87.00
참고: 정기적으로 CPU 지표를 수집하도록 sar을 구성할 수 있습니다. 자세한 내용은 Red Hat 웹 사이트에서 sar 명령을 참조하십시오.
버스트 가능 인스턴스 유형 밸런스 확인
인스턴스 유형이 다르면 스틸 시간 문제에 더 취약합니다. 예를 들어, 지속적으로 높은 CPU 사용량으로 인해 t2 및 t3과 같은 버스트 가능 인스턴스 유형에서 CPU 크레딧이 고갈되고 성능이 저하될 수 있습니다.
버스트 가능 인스턴스 유형의 크레딧 밸런스가 지속적으로 낮거나 0인 경우 인스턴스 유형을 더 큰 크기로 변경하십시오. 인스턴스 유형을 m, c 또는 r 시리즈와 같이 버스트할 수 없는 인스턴스로 변경합니다.
인스턴스 또는 애플리케이션 구성 최적화
특정 프로세스에서 높은 CPU를 사용하는 경우 다음 작업을 수행하십시오.
- 높은 CPU 사용량이 예상된 동작인지 조사합니다.
- 애플리케이션 로그에 오류나 예기치 않은 동작이 있는지 확인합니다.
- 애플리케이션 또는 서비스를 다시 시작합니다.
CPU 사용량이 예상한 동작이지만 여전히 너무 높으면 애플리케이션을 조정하여 효율성을 높이십시오. 예를 들어, 컴퓨팅 집약적 워크로드는 다른 인스턴스나 컨테이너로 이동하는 것이 가장 좋습니다.
트래픽 및 로드 패턴 관리
트래픽 또는 로드 패턴으로 인해 높은 CPU 사용량 문제가 반복되는 경우 다음 작업을 수행하십시오.
관련 정보
리소스 과다 사용으로 인해 상태 검사에 실패한 EC2 Linux 인스턴스의 문제를 해결하려면 어떻게 해야 합니까?