Java Lambda 함수의 초기화 및 호출 지연 대기 시간을 줄이려면 어떻게하나요?

3분 분량
0

Java AWS Lambda 함수의 성능이 최적화되지 않았습니다. 이런 현상이 발생하는 원인은 무엇이고, Java 함수의 초기화 및 지연 대기 시간을 줄이려면 어떻게 해야 하나요?

간략한 설명

Java Lambda 함수에서 지연 대기 시간이 길어지는 데는 2가지 주요 요인이 있습니다.

Java 가상 머신(JVM) 지연 클래스 로딩

메모리 사용량을 줄이기 위해 JVM은 애플리케이션에서 라이브러리가 처음 호출될 때까지 Java 클래스 라이브러리 초기화를 지연시킵니다. 이러한 지연으로 인해 입출력(I/O) 작업이 많아지면 Lambda 실행 환경에서 첫 번째 호출에 대한 지연 시간이 길어집니다.

Java Reflection API

Java Reflection API를 사용하면 Java 코드가 다른 클래스, 인터페이스, 필드 및 메서드에 대한 정보를 검색한 다음 기본 값으로 작동할 수 있습니다. 리플렉션에는 동적으로 해결되는 유형이 포함되므로 특정 JVM 최적화를 수행할 수 없습니다. 그 결과 리플렉션 작업은 비리플렉션 작업보다 성능이 느려집니다.

Java Lambda 함수의 성능을 최적화하려면 이 문서에 설명된 하나 이상의 모범 사례를 구현할 수 있습니다.

참고: 특정 사례 연구를 보려면 AWS re:Invent 2019: AWS Lambda 및 Java에 대한 모범 사례를 참조하세요.

해결 방법

Lambda 함수에 대해 프로비저닝된 동시성 구성

프로비저닝된 동시성은 요청된 수의 실행 환경을 초기화하므로 함수의 호출에 즉시 응답할 수 있습니다. 함수에 대하여 프로비저닝된 동시성을 설정하려면 프로비저닝된 동시성 구성의 지침을 따르세요.

자세한 내용은 Lambda 함수에 대한 동시성 관리를 참조하세요.

참고: 프로비저닝된 동시성을 구성하면 AWS 계정에 요금이 부과됩니다. 함수 버전 또는 Lambda 함수 별칭에서 프로비저닝된 동시성을 구성할 수 있습니다.

함수 핸들러 외부에서 함수의 정적 로직을 초기화합니다.

Lambda 함수를 초기화하면 Lambda는 최대 10초 동안 호스트 CPU 용량 버스트를 할당합니다. 이 CPU 버스트 때문에 함수 핸들러 외부에서 다음을 수행하는 것이 가장 좋습니다.

  • 라이브러리 및 종속성 가져오기
  • 설정 구성
  • 다른 서비스에 대한 연결 초기화

이 정적 초기화를 사용하면 이러한 리소스를 샌드박스당 1회 초기화한 후 실행 환경에서 향후 모든 호출에 재사용할 수 있습니다.

자세한 내용은 정적 초기화 최적화하기를 참조하세요.

함수 핸들러 외부에서 지연 로드된 모든 라이브러리에 API 호출하기

초기화 중에 라이브러리 로드가 지연되지 않도록 함수 핸들러 외부에서 지연 로드된 라이브러리에 대하여 더미 API 호출을 수행할 수 있습니다. 이러한 더미 호출은 라이브러리를 초기화하고 사용 중인 SDK를 미리 워밍합니다.

참고: Lambda에 성공적인 API 호출에 필요한 정보가 없는 경우 지연 로드된 라이브러리에 대한 더미 호출이 실패할 수 있습니다. 호출에 실패하면 오류를 찾아내야 합니다.

Lambda 코드에서 리플렉션 작업 줄이기

리플렉션 작업은 비리플렉션 작업보다 성능이 느립니다. 자주 호출되는 코드 섹션에서 리플렉션 작업을 지양하세요.

애플리케이션의 클래스 수 줄이기

배포 패키지의 크기를 런타임 필수 항목으로 줄이면 함수를 호출하는 데 걸리는 시간이 줄어듭니다.

자세한 내용은 AWS Lambda 함수 작업의 모범 사례를 참조하세요.

Lambda 함수의 구성 파라미터를 미리 설정합니다.

함수의 구성 파라미터를 미리 설정하면 함수의 호출 및 지연 대기 시간이 줄어듭니다. 코드에서 구성 변수를 지정하지 않는 경우 Lambda가 함수의 기본 변수를 검색하는 데 더 많은 시간이 걸립니다.

자세한 내용은 AWS Lambda 함수 작업에 대한 모범 사례함수 코드 섹션을 참조하세요.

AWS Java SDK 2.0으로 업데이트

자세한 내용은 AWS Java SDK 2.x 튜닝으로 시작 시간 단축하기를 참조하세요.

참고:AWS Java SDK 2.0에는 기본적으로 Apache HTTP 클라이언트Netty HTTP 클라이언트Java HTTP URL Connection 클라이언트와 함께 포함되어 있습니다. 사용 사례에 필요하지 않은 경우 배포 패키지에서 Apache 및 Netty HTTP 클라이언트를 제거하는 것이 가장 좋습니다.


AWS 공식
AWS 공식업데이트됨 3년 전