Diagnostique gargalos de desempenho em deployments em execução com gráficos de chama, profiling de memória, amostragem de threads e thread dumps no nível da JVM.
Pré-requisitos
Antes de começar, verifique se você tem:
Permissões no nível de namespace para o Realtime Compute for Apache Flink concedidas à sua conta Alibaba Cloud ou usuário RAM. Conceder permissões de namespace.
Limitações
Somente o Ververica Runtime (VVR) 4.0.11 ou superior oferece suporte ao monitoramento de desempenho de deployments.
Os dados de desempenho estão disponíveis apenas para deployments em execução. O sistema não retém dados históricos de deployments.
Escolha uma ferramenta
Comece pela ferramenta correspondente ao sintoma investigado.
|
Sintoma |
Ferramenta |
O que ela mostra |
|
Alto uso de CPU ou throughput lento |
Flame Graph |
Métodos com uso intensivo de CPU e respectivas pilhas de chamadas |
|
Suspeita de pressão de memória |
Flame Graph (modo Alloc) ou Memory |
Alocação de memória por função ou uso de memória da JVM por espaço |
|
Contenção de threads ou suspeita de deadlocks |
Flame Graph (modo Lock) ou Threads |
Padrões de contenção de locks ou rastreamentos de pilha por thread via amostragem |
|
Necessidade de um snapshot completo de todos os estados das threads |
Thread Dump |
Todas as pilhas de threads em um único momento |
Flame Graph
Gráficos de chama representam pilhas de chamadas como barras horizontais em camadas. Cada barra corresponde a um quadro de pilha; barras mais largas indicam maior tempo de CPU e sinalizam possíveis gargalos. A camada inferior representa o ponto de entrada, enquanto as superiores correspondem a chamadas mais profundas.
A documentação do Apache Flink sobre Flame Graphs aborda os conceitos subjacentes.
Modos de gráfico de chama
|
Modo |
O que ele captura |
|
CPU |
Rastreamentos de pilha de threads em execução ativa. Quadros mais largos indicam maior uso de CPU. |
|
Alloc |
Memória alocada por cada função. Identifica funções que geram maior pressão no heap. |
|
Lock |
Padrões de contenção de locks e deadlocks. Destaca funções aguardando aquisição de locks. |
|
ITimer |
Consumo de CPU em todas as threads dentro de um intervalo de amostragem. Semelhante ao modo CPU, mas não requer suporte a |
Identificar gargalos com gráficos de chama

Procure quadros largos. Um quadro largo significa que a função consome grande parte do tempo de CPU, sendo o indicador de hot-spot mais comum.
Verifique a frequência dos quadros. Quadros recorrentes nas amostras indicam funções chamadas frequentemente, o que pode causar degradação cumulativa de desempenho.
Interprete a posição vertical. Quadros largos próximos à base sugerem problemas no caminho principal da aplicação. Quadros largos no topo apontam para uma função específica nas camadas mais profundas da pilha de chamadas.
Otimize os hot-spots. Revise o código das funções problemáticas. Correções comuns incluem reduzir iterações de loops, melhorar estruturas de dados e minimizar sincronizações.
Compare o antes e o depois. Gere um novo gráfico de chama após a otimização e compare-o com o original para verificar a correção.
Gráficos de chama usam dados amostrados e podem não capturar todo o contexto de execução. Combine-os com as outras ferramentas desta página para um diagnóstico mais preciso. Funções não Java aparecem como "unknown"; a discussão do async-profiler explica o motivo.
Memory
A aba Memory exibe o uso de memória nos espaços da JVM (heap, non-heap, metaspace, entre outros). Utilize-a para identificar vazamentos de memória, coleta de lixo excessiva ou espaços próximos aos limites.
Threads
A amostragem de threads captura rastreamentos de pilha durante uma janela de tempo, mostrando a atividade de cada thread durante um problema de desempenho.
Amostragem de thread
Acesse a aba Debug do componente a inspecionar:
JobManager: Na aba Logs, clique em aba Job Manager e, em seguida, em Debug.
TaskManager: Na aba Logs, clique em aba Running Task Managers, no valor da coluna Path, ID e, depois, em Debug.
Na aba Threads, localize o operador a inspecionar e clique em Sample na coluna Actions. Aguarde a conclusão da amostragem e analise as pilhas de threads.

Este exemplo mostra pilhas de threads acessadas pelo Gemini State.
Thread Dump
Um thread dump captura o estado de todas as threads em um único momento. Use-o para detectar deadlocks, identificar threads bloqueadas ou verificar interações com o backend de estado.
Capturar um thread dump
Na aba Logs, clique em aba Running Task Managers e, em seguida, no valor da coluna Path, ID.
Clique em aba Thread Dump.
Pesquise o operador que processa dados de estado. Verifique se as pilhas de threads sob o operador mostram interações com GeminiStateBackend ou RocksDBStateBackend.

Encontre o nome do operador na aba Status.

Referências
Executar diagnósticos inteligentes de deployment: Detecte automaticamente problemas de integridade e estabilidade do deployment.
Otimizar Flink SQL: Melhore o desempenho do deployment mediante ajustes de configuração e otimização de Flink SQL.