Как настроить Java сборщик мусора в AWS Lambda - PullRequest
0 голосов
/ 06 сентября 2018

В моем текущем проекте у меня есть функция 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 или это полностью закрытый черный ящик?

1 Ответ

0 голосов
/ 06 сентября 2018

Настройка GC не поможет улучшить время холодного запуска AWS Lambda. Языки JVM имеют более длительное время холодного запуска, чем некоторые альтернативы, из-за времени, необходимого для фактической загрузки виртуальной машины в память и последующей загрузки всех классов из файлов JAR. Каркас, который использует отражение для определения того, что загружать, будет еще больше замедлять работу.

Чтобы улучшить холодный запуск, избегайте фреймворков, таких как Spring Boot, и минимизируйте ваши зависимости. Вы также можете попробовать толстую банку.

...