AWS AMI 오류

임채륜·2025년 8월 20일

작업일기

목록 보기
6/6

🖌️ 서론

최근 하우미의 서버비용을 절감하기 위해서 AWS에서의 다운그레이드를 진행중이다.
그렇기에 기존에 사용하던 t3.medium의 비용이 많다고 판단해
t3.small 또는 t3.micro로 변경을 해보고자 했다.

EC2를 다운그레이드 이후에 CI/CD를 re-run 했는데, 오류가 발생했다.

처음에는 다운그레이드로 인한 메모리 부족 현상인줄 알았는데, 모니터링 결과 그건 아니었다.
해서 로그를 자세히 읽어봤는데 다음과 같은 과정에서 오류가 발생했다.

오류 발생 과정
1. S3Config에서 amazonS3Client Bean을 생성
2. aws-java-sdk-s3 라이브러리가 초기화되면서, 성능 모니터링을 위해 AWS SDK 자체의 지표 수집 기능을 활성화
3. 이 지표 수집 기능이 서버의 CPU나 시스템 정보를 얻기 위해 자바(JDK)의 내부 기능을 호출

이 과정에서 오류가 발생했다.

오류가 나는 이유

오류가 발생하는 이유는 JIB에서의 JDK 이미지 버전 문제였다.
베이스 이미지를 openjdk:17-oracle로 사용중이었는데, 이게 17.0.2가 기본 설정이 되어있었다.

🔺이게 왜 문제?

최근들어서 Amazon Linux AMI들이 기본적으로 Cgroup v2를 사용하도록 변경되면서, 이전에는 없던 컨테이너 환경에서 특정 버전의 JDK가 시스템 리소스 정보를 제대로 읽지 못해 발생하는 버그가 발생했던 것이다.

해결

해당 베이스 이미지를 eclipse-temurin:17-jdk로 변경해 JDK 이미지를 설정해주었더니 바로 해결됐다.

eclipse JDK는 커뮤니티 버전이고, oracle은 기업 제공이라 조금 더 활발한 eclipse 버전으로 변경했다.

Cgroup?

Cgroup은 Control Groups로 리눅스 커널의 기능이다. 이는 프로세스들의 그룹에 할당되는 시스템 자원을 제한하고 격리하는 매커니즘이다.

핵심기능

  • 자원 제한 : 특정 그룹이 사용할 수 있는 메모리, CPU, 네트워크 대역폭 등의 상한선을 정한다.
  • 우선순위 제어 : 어떤 그룹에 더 많은 CPU나 디스크 I/O를 할당할지 우선순위를 정한다.
  • 사용량 측정 : 각 그룹이 얼마나 많은 자원을 사용했는지 측정한다.
  • 격리 : 한 그룹이 다른 그룹의 프로세스나 자원에 접근하지 못하도록 격리한다.

v1와 v2의 차이

특징Cgroup v1Cgroup v2
계층 구조각 자원 컨트롤러(cpu, memory 등)가 독립적인 계층을 가짐. (복잡하고 불일치 발생)단일 통합 계층 구조를 가짐. (깔끔하고 일관성 있음)
프로세스 할당프로세스는 여러 다른 컨트롤러 그룹에 동시에 속할 수 있어 관리가 복잡함.프로세스는 오직 하나의 그룹에만 속할 수 있음. (규칙이 명확함)
자원 제어자원 분배에 불일치가 발생할 수 있음. (예: 부모 그룹의 자원을 자식 그룹이 모두 사용 가능)계층 구조 전체에 걸쳐 자원을 일관성 있게 분배함. (더 정교한 제어 가능)
인터페이스각 컨트롤러마다 파일 구조와 동작 방식이 조금씩 다름.모든 컨트롤러가 통일된 파일(cgroup.controllers, cgroup.procs 등) 인터페이스를 사용함.
핵심 개선점어떻게든 돌아는 간다설계적으로 올바르게 돌아간다

참고
리눅스 커널 공식문서

profile
성장하는 괴발자

0개의 댓글