Usar as configurações de diagnóstico das opções de JVM para solução de problemas avançada no Azure Spring Apps

Observação

Azure Spring Apps é o novo nome do serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns locais por um tempo enquanto trabalhamos para atualizar ativos como capturas de tela, vídeos e diagramas.

Este artigo aplica-se a: ✔️ Java ❌ C#

Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo mostra como usar configurações de diagnóstico por meio das opções de JVM para realizar a solução de problemas avançada no Azure Spring Apps.

Há vários parâmetros de inicialização de aplicativo baseados em JVM relacionados a logs de GC (coleta de lixo), de despejo de heap, e do JFR (Java Flight Recorder). No Azure Spring Apps, damos suporte à configuração de JVM usando opções de JVM.

Para saber mais sobre como configurar parâmetros de inicialização de aplicativo baseados em JVM, confira az spring app deployment na documentação de referência da CLI do Azure. As seções a seguir fornecem vários exemplos de valores úteis para o parâmetro --jvm-options.

Pré-requisitos

  • Uma instância de serviço do Azure Spring Apps implantada. Siga nosso início rápido sobre como implantar um aplicativo por meio da CLI do Azure para obter uma introdução.
  • Pelo menos um aplicativo já criado na instância de serviço.
  • Um armazenamento persistente próprio, conforme descrito em Como habilitar seu armazenamento persistente no Azure Spring Apps. Esse armazenamento é usado para salvar arquivos de diagnóstico gerados. Os caminhos que você fornecer nos valores de parâmetro abaixo deverão estar no caminho de montagem do armazenamento persistente associado ao seu aplicativo. Se você quiser usar um caminho no caminho de montagem, precisará criar o subcaminho com antecedência.

Gerar um despejo de heap quando estiver sem memória

Use o parâmetro --jvm-options a seguir para gerar um despejo de heap quando encontrar um erro de memória insuficiente.

--jvm-options="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path-to-heap-dump-folder>"

Como alternativa à especificação do caminho para a pasta de despejo de heap, você pode fornecer um nome de arquivo específico. No entanto, é altamente recomendável que você forneça um caminho de pasta. Se você fornecer um nome de arquivo, o comando gerará um despejo de heap apenas para o primeiro erro de memória insuficiente, devido às limitações do formato de arquivo HPROF. Se você fornecer um caminho de pasta, obterá um despejo de heap em um arquivo com um nome gerado automaticamente para cada erro de memória insuficiente.

Gerar logs de GC

Use o parâmetro --jvm-options a seguir para gerar logs de GC. Para obter mais informações, confira a documentação oficial do JVM.

--jvm-options="-XX:+PrintGCDetails -Xloggc:<path-to-GC-log-file>"

Gerar um arquivo JFR na saída

Use o parâmetro --jvm-options a seguir para gerar um arquivo JFR. Para obter mais informações, confira a documentação oficial do JVM.

--jvm-options="-XX:StartFlightRecording=dumponexit=true,filename=<path-to-JFR-file>"

Configurar o caminho para arquivos gerados

Para garantir que você possa acessar seus arquivos, verifique se o caminho de destino do arquivo gerado está no armazenamento persistente vinculado ao seu aplicativo. Por exemplo, você pode usar um JSON semelhante ao exemplo a seguir ao criar o armazenamento persistente no Azure Spring Apps.

    {
       "customPersistentDisks": [
          {
              "storageName": "<storage-resource-name>",
              "customPersistentDiskProperties": {
                  "type": "AzureFileVolume",
                  "shareName": "<azure-file-share-name>",
                  "mountPath": "<unique-mount-path>",
                  "mountOptions": [
                      "uid=0",
                      "gid=0"
                   ],
                   "readOnly": false 
                }
          },
          {
              "storageName": "<storage-resource-name>",
              "customPersistentDiskProperties": {
                  "type": "AzureFileVolume",
                  "shareName": "<azure-file-share-name>",
                  "mountPath": "<unique-mount-path>",
                  "readOnly": true
              }
          }
       ]
    }

Como alternativa, você pode usar o comando a seguir para anexar ao armazenamento persistente.

az spring app append-persistent-storage \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <app-name> \
    --persistent-storage-type AzureFileVolume \
    --storage-name <storage-resource-name> \
    --share-name <azure-file-share-name> \
    --mount-path <unique-mount-path>

Próximas etapas