Personalizar o comportamento de startup de runtime para as funções do Lambda - AWS Lambda

Personalizar o comportamento de startup de runtime para as funções do Lambda

Esta página descreve as configurações específicas das funções  do Java no AWS Lambda. Você pode usar essas configurações para personalizar o comportamento de inicialização de runtime do Java. Isso pode reduzir a latência geral da função e melhorar a  performance geral da função sem a necessidade de modificar  qualquer código.

Entender a variável de ambiente JAVA_TOOL_OPTIONS

No Java, o Lambda é compatível com a variável de ambiente JAVA_TOOL_OPTIONS para definir variáveis adicionais da linha de comando no Lambda. Você pode usar essa variável de ambiente de várias maneiras, como para personalizar configurações de compilação em camadas. O exemplo a seguir demonstra como usar a variável de ambiente JAVA_TOOL_OPTIONS para esse caso de uso.

Exemplo: personalizar as configurações de compilação em camadas

A compilação em camadas é um recurso da máquina virtual Java (JVM). É possível usar configurações específicas de compilação em camadas para fazer o melhor uso dos compiladores just-in-time (JIT) da JVM. Normalmente, o compilador C1 é otimizado para um tempo de inicialização rápido. O compilador C2 é otimizado para a melhor performance geral, mas também usa mais memória e leva mais tempo para alcançá-la.

Existem cinco níveis diferentes de compilação em camadas. No nível 0, a JVM interpreta o código de bytes do Java. No nível 4, a JVM usa o compilador C2 para analisar os dados de criação de perfil coletados durante a inicialização da aplicação. Com o tempo, ele monitora o uso do código para identificar as melhores otimizações.

Personalizar o nível de compilação em camadas pode ajudar a reduzir a latência de inicialização a frio da função do Java. Por exemplo, defina o nível de compilação em camadas como 1 para que a JVM use o compilador C1. Esse compilador produz rapidamente código nativo otimizado, mas não gera qualquer dado de criação de perfil e nunca usa o compilador C2.

Por padrão, no runtime do Java 17, o sinalizador da JVM para compilação em camadas é configurado para ser interrompido no nível 1. No runtime do Java 11 e versões inferiores, você pode definir o nível de compilação em camadas como 1 ao executar as seguintes etapas:

Para personalizar as configurações de compilação em camadas (console)
  1. Abra a página Funções no console do Lambda.

  2. Escolha uma função do Java para a qual você deseja personalizar a compilação em camadas.

  3. Escolha a guia Configuração e, em seguida, escolha Variáveis de ambiente no menu à esquerda.

  4. Selecione a opção Editar.

  5. Escolha Add environment variable (Adicionar variável de ambiente).

  6. Na chave, insira JAVA_TOOL_OPTIONS. No valor, insira -XX:+TieredCompilation -XX:TieredStopAtLevel=1.

    Adicionar a variável de ambiente JAVA_TOOL_OPTIONS usando o console do Lambda
  7. Escolha Salvar.

nota

Você também pode usar o Lambda SnapStart para mitigar problemas de inicialização a frio. O SnapStart usa snapshots em cache do ambiente de execução para melhorar significativamente a performance da inicialização. Para obter mais informações sobre os recursos, limitações e regiões compatíveis com o SnapStart, consulte Aprimoramento da performance de inicialização com o Lambda SnapStart.

Exemplo: personalização do comportamento do GC usando JAVA_TOOL_OPTIONS

Os runtimes do Java 11 usam o Serial garbage collector (GC) para a coleta de resíduos. Por padrão, os runtimes do Java 17 também usam o Serial GC. No entanto, com o Java 17, você também pode usar a variável de ambiente JAVA_TOOL_OPTIONS para alterar o GC padrão. Você pode escolher entre o Parallel GC e o Shenandoah GC.

Por exemplo, se sua workload usa mais memória e diversas CPUs, considere usar o Parallel GC para obter melhor performance. Você pode fazer isso ao anexar o seguinte ao valor da variável de ambiente JAVA_TOOL_OPTIONS:

-XX:+UseParallelGC