Gravador do JDK Flight
O Java Flight Recorder (JFR) é uma ferramenta de vários propósitos para coletar vários dados para executar aplicativos Java e sua JVM. O JMS se baseia nele e permite que os administradores de frota solicitem gravações de JFR em todos os aplicativos descobertos pelo JMS.
O ônus de acessar as máquinas que executam os aplicativos, usando várias ferramentas para iniciar gravações JFR, coletar as gravações JFR e acessar as gravações de um só lugar é reduzido usando JMS. Como o Java Flight Recorder pode observar e coletar muitas métricas úteis fornecidas pela JVM, como uso de memória, coleta de lixo, uso de threads, exceções e assim por diante, os clientes podem rastrear facilmente o comportamento de seus aplicativos.
Console do OCI Cloud
- Acesse a Console do OCI como administrador.
- Abra o menu de navegação, clique em Observabilidade e Gerenciamento e, em seguida, clique em Frota em Java Management.
- Selecione sua frota.
- Clique em Instâncias gerenciadas e, em seguida, clique na instância gerenciada na qual o aplicativo está em execução.
- Clique em Aplicativos e selecione o aplicativo no qual o registro de JFR deve ser iniciado.
- Clique em Ações e selecione Executar Gravador do JDK Flight.
- Clique em Iniciar.
- Quando a solicitação de serviço for concluída, clique na solicitação de serviço e, em detalhes, navegue até os arquivos JFR localizados no bucket da sua frota.
CLI do OCI
- Crie o modelo de payload de destinos usando o seguinte comando:
oci jms fleet request-jfr-recordings --generate-param-json-input targets
- Encontre detalhes sobre seu aplicativo, por exemplo, com:
oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
- Edite o arquivo json de payload, por exemplo:
[ { "applicationInstallationKey": "$APP_INSTALL_KEY", "applicationKey": "$APP_KEY", "jreKey": "$APP_JRE_KEY", "managedInstanceId": "$MANAGED_INSTANCE_OCID" } ]
- Execute o seguinte comando:
oci jms fleet request-jfr-recordings --fleet-id $FLEET_OCID --jfc-profile-name default.jfc --targets file://targets.json
Exemplo
#!/usr/bin/env bash
# configuration variables
APP_INSTALL_LOCATION=/usr/share/tomcat
JFC_FILENAME=custom.jfc
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
# get application installation key
APP_INSTALL_KEY=$(oci jms application-installation-usage-summary summarize-application-installation-usage --app-installation-path-contains "$APP_INSTALL_LOCATION" --fleet-id $FLEET_OCID | jq -r '.data.items[]."application-installation-key"')
# create custom jfc file from default profile
jfr configure thread-dump=10s exceptions=all --output $JFC_FILENAME
ENCODED_JFC=$(cat $JFC_FILENAME | base64)
# start jfr recording with v2 custom profile for JDK 9 or higher
WORK_REQUEST_OCID=$(oci jms fleet request-jfr-recordings \
--fleet-id "$FLEET_OCID" \
--jfc-profile-name custom-profile \
--jfc-v2 "$ENCODED_JFC" \
--targets "[{\"applicationInstallationKey\":\"$APP_INSTALL_KEY\", \"managedInstanceId\":\"$MANAGED_INSTANCE_OCID\"}]" | jq -r '."opc-work-request-id"')
echo $WORK_REQUEST_OCID
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status
Observação:
- O utilitário de linha de comando
jfr
faz parte de pacotes JDK mais recentes. - O utilitário de linha de comando
base64
pode não estar presente na plataforma Windows.
Depois que a solicitação de serviço for concluída, o JFR será submetido a upload para o bucket associado à sua frota:
# list all the jfr recordings created during work request execution
oci jms work-request-log-entry list-work-request-logs --all --work-request-id "$WORK_REQUEST_OCID" | jq -r '.data.items[].message | fromjson | select(.objectName != null) | .objectName' | sort | uniq
JMS/JFR/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/20250710104111_155_0_91783_0_org.apache.catalina.startup.Bootstrap.jfr