리소스 과다 사용으로 인해 EC2 Linux 인스턴스가 응답하지 않는 이유는 무엇인가요?

5분 분량
0

리소스 과다 사용으로 인해 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스가 응답하지 않습니다. 어떻게 하면 이 문제를 방지할 수 있나요?

간략한 설명

인스턴스가 응답하지 않는 데에는 몇 가지 일반적인 원인이 있습니다:

  • 메모리: EC2 인스턴스에는 기본적으로 스왑 공간이 할당되지 않습니다. 메모리가 부족하면 Linux OOM(메모리 부족) 관리자가 호출됩니다. OOM 관리자는 데이터베이스, 웹 서버 또는 SSH 서비스와 같은 프로세스를 종료합니다.
  • 네트워킹: 네트워킹이 없으면 시스템이 상태 확인의 ARP 요청에 응답할 수 없습니다. 이 경우 인스턴스가 다른 호스트와의 통신에 실패합니다.
  • I/O 작업: 디스크 I/O가 없으면 읽기 또는 쓰기 명령이 중단됩니다. 임시 파일 생성, 시스템 라이브러리 또는 데이터베이스에서 읽기 등이 이에 해당합니다.
  • CPU: 위의 모든 작업을 수행하려면 CPU 시간이 필요합니다. 오랜 시간 동안 100% CPU를 사용하면 커널이 정상적인 운영 체제 작업을 수행할 수 없습니다.

이러한 문제가 누적되어 그 효과가 불어날 수도 있습니다. 예를 들어 메모리가 부족하여 OOM 관리자가 중요한 프로세스를 종료합니다. 이제 중지된 첫 번째 프로세스에 의존하는 두 번째 프로세스는 훨씬 더 많은 수의 CPU 사이클을 시작합니다. 이 작업이 디스크와 관련된 작업인 경우 이 주기로 인해 Amazon Elastic Block Store(Amazon EBS) 볼륨이 소진될 수도 있습니다. 또한 응답하지 않는 인스턴스와의 통신이 예상되는 다른 인스턴스로 문제가 이전될 수 있습니다.

해결 방법

시스템의 CPU 사용률이 높거나 리소스 과다 사용으로 인해 응답하지 않는 경우가 종종 있는 경우 다음을 수행하세요:

정보 수집

Amazon CloudWatch를 사용하여 CPU 사용량을 모니터링

Amazon CloudWatch와 같은 모니터링 도구를 사용하여 리소스 사용률이 높은 추세와 패턴을 관찰할 수 있습니다.

시스템 모니터링 도구 사용

여러 서비스가 있고 어떤 서비스가 리소스를 과도하게 사용하고 있는지 확실하지 않은 경우 atop과 같은 유틸리티를 설치하세요. 또한 htop, topsar과 같은 도구를 사용할 수 있습니다. 이러한 모든 도구는 CPU 사용량을 가장 많이 소비하는 프로세스를 식별하는 데 도움이 됩니다. 자세한 내용은 다음을 참조하세요:

높은 CPU를 사용하는 프로세스에 대한 자세한 정보 확인

pidstat 또는 ps 명령을 사용하여 프로세스에 대한 자세한 정보를 확인하세요. 명령 출력에 제공된 정보는 프로세스가 시스템 프로세스인지 사용자 프로세스인지 확인하는 데 도움이 됩니다. 이러한 명령을 실행하는 데 필요한 도구를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요:

  • 리눅스 매뉴얼 페이지의 pidstat(1)
  • 리눅스 매뉴얼 페이지의 ps(1)

시스템 로그 확인

높은 CPU 사용량과 관련된 오류나 경고를 확인합니다. 예를 들어 dmesg 명령을 사용하여 커널 메시지를 보고 시스템 메시지에 대한 /var/log/syslog 또는 /var/log/messages 파일을 볼 수 있습니다. 명령 출력 및 로그 파일 내용은 문제를 일으키는 시스템 또는 애플리케이션 문제를 식별하는 데 도움이 됩니다.

명령 기록 검토

명령 기록을 검토하여 작업자 오류가 있었는지 확인합니다. 명령 기록은 일반적으로 ~/.bash_history 파일에 있습니다.

예약된 작업 확인

EC2 인스턴스에서 CPU 사용량을 높일 수 있는 예약된 작업이나 크론 작업이 실행 중인지 확인합니다. 먼저 높은 CPU 사용량의 타임스탬프를 확인합니다. 그 다음에 다음 명령을 실행하여 크론 작업을 나열합니다:

sudo crontab -l
sudo cat /etc/crontab
sudo cat crontab -l -u <username>

위 명령은 루트 사용자의 crontab 구성을 나열합니다. 명령에 -u 옵션을 포함하여 특정 사용자의 cron을 확인합니다. 그런 다음 문제를 지적한 시간을 찾아보세요. 다음을 포함하여 로그를 확인하세요:

/var/log/messages
/var/log/syslog
/var/log/dmesg
/var/log/cron.log

grep 명령을 사용하여 조사하려는 특정 크론 작업에 대한 관련 항목을 필터링합니다. 식별된 크론 중 하나와 관련된 오류가 발생했는지 확인합니다.

메모리 사용량 확인

메모리 사용량이 많으면 스왑 공간 사용으로 인해 CPU 사용량이 증가할 수 있습니다. free 명령을 사용하여 메모리 사용량을 확인합니다. 필요한 도구를 구성하고 사용하는 방법에 대한 자세한 내용은 redhat.com 웹사이트의 free 명령 분석을 참조하세요.

네트워크 트래픽 확인

네트워크 트래픽이 많으면 특히 인스턴스가 많은 네트워크 요청을 처리하는 경우 CPU 사용률이 높아질 수 있습니다. iftop 명령어를 사용하여 네트워크 트래픽을 모니터링하고, 필요한 경우 네트워크 구성을 최적화하거나 인스턴스 유형을 업그레이드해 보세요. 필요한 도구를 구성하고 사용하는 방법에 대한 자세한 내용은 redhat.com 웹사이트의 ](https://www.redhat.com/sysadmin/linux-interface-iftop)iftop을 사용하여 온디맨드 Linux 인터페이스 분석[을 참조하세요.

디스크 I/O 확인

디스크 I/O가 많으면 CPU 사용량이 증가할 수 있습니다. iostat 명령을 사용하여 디스크 I/O를 모니터링하고 높은 I/O를 유발할 수 있는 프로세스를 식별하세요. 자세한 내용은 redhat.com 웹사이트의 Linux 명령줄에서 I/O 보고를 참조하세요.

취득한 데이터를 기반으로 행동

코드 최적화

애플리케이션이 CPU 사용량을 높이는 경우 코드를 최적화하세요. 이를 위해서는 성능 병목 현상을 식별하고 제거해야 합니다. perf 또는 strace와 같은 프로파일링 도구는 문제가 있는 코드를 식별하는 데 도움이 됩니다. 필요한 도구를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요:

인스턴스 업그레이드

프로세스가 사용자 수가 많은 등 타당한 이유로 많은 리소스를 사용하고 있다면 인스턴스 업그레이드를 고려해 보세요.

AWS Compute Optimizer는 사용할 적절한 인스턴스 유형과 크기를 결정하는 데 도움이 될 수 있습니다. Amazon EC2 Auto Scaling을 사용하여 수평적으로 확장하는 것도 고려해 볼 수 있습니다.

Linux 감사 규칙 구성

사용자 명령 및 구성 변경을 더 효과적으로 파악하려는 경우 변경 사항을 추적하도록 Linux 감사 시스템을 구성할 수 있습니다.

향후의 과다 사용 방지

  1. 프로덕션 환경에 새 애플리케이션을 배포하기 전에 테스트 환경과 벤치마크를 만들어서 필요한 컴퓨팅, 메모리, EBS 및 네트워크를 결정하세요. 벤치마크에 따라 배포하는 동시에 내결함성을 위해 구축하세요. 자세한 내용은 다음을 참조하세요: 
    고장 방지를 위한 분산 시스템의 상호 작용 설계
    튜토리얼: 확장 및 로드 밸런싱된 애플리케이션 설정
  2. 인스턴스에서 실행되는 애플리케이션이 성능에 최적화되어 있는지 확인합니다. 최적화에는 구성 파일 조정, 데이터베이스 쿼리 최적화 또는 코드 최적화가 포함됩니다.
  3. 애플리케이션이 데이터베이스를 많이 사용하는 경우 캐싱을 구현하여 데이터베이스에 대한 쿼리 수를 줄이는 것이 좋습니다.
  4. 최신 보안 패치와 버그 수정을 통해 소프트웨어가 최신 상태인지 확인하세요. 오래된 소프트웨어는 성능 문제 및 취약성을 유발하여 CPU 사용률을 높일 수 있습니다.
  5. 애플리케이션의 트래픽 볼륨이 높으면 로드 밸런서를 사용하여 여러 EC2 인스턴스에 트래픽을 분산하는 것을 고려해 보세요. 로드 밸런서는 한 인스턴스의 CPU 사용률을 줄입니다.
  6. 인스턴스를 계속 모니터링하고 특정 리소스 사용량 임계값에 대한 경보를 생성하세요.
AWS 공식
AWS 공식업데이트됨 10달 전