В моем текущем проекте у меня есть функция AWS Lambda, написанная на Java. Я ищу способы уменьшить задержки холодного старта Lambda. К сожалению, в данный момент у меня нет возможности переписать функцию на другом языке (Python или Go). Помимо стандартных действий по оптимизации кода функции, я исследую другие способы.
Опытным путем я обнаружил, что увеличение значения ОЗУ приводит к повышению производительности. Меня интересовало, какая конфигурация JVM используется в среде Lambda, но это была не очень доступная информация. Поэтому я попытался использовать следующую функцию, которая перебирает InputArguments в RuntimeMXBean (я нашел подобное исследование в Интернете):
Извлечение лямбда-параметров
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List arguments = runtimeMxBean.getInputArguments();
for (String arg : arguments) {
context.getLogger().log(arg);
}
return "Call succeeded.";
}
}
И я получил такой результат:
-XX:MaxHeapSize=445645k
-XX:MaxMetaspaceSize=52429k
-XX:ReservedCodeCacheSize=26214k
-XX:+UseSerialGC
-Xshare:on
-XX:-TieredCompilation
Как вы видите, он настроен на использование Serial GC и не использует многоуровневую компиляцию. Я не уверен, почему инженеры AWS выбирают такую конфигурацию, но было бы интересно попробовать использовать другие настройки JVM. Есть ли возможность настроить GC на JVM AWS Lambda или это полностью закрытый черный ящик?