Introdução
Se a sua app tiver uma latência superior à habitual, um débito fraco ou tempos limite com o cliente Java Datastore, o problema pode ter origem na configuração gRPC do lado do cliente e não no back-end do Firestore/Datastore. Este guia ajuda a diagnosticar e resolver problemas comuns de limitação do lado do cliente, definições incorretas do conjunto de canais e rotatividade excessiva de canais.
Diagnóstico
Quando usar clientes Java, a ativação do registo detalhado do gRPC e do gax-java é fundamental para monitorizar a dinâmica do conjunto de canais, diagnosticar a limitação, os problemas de reutilização de ligações ou identificar a rotatividade excessiva de canais.
Ative o registo para clientes Java
Para ativar o registo detalhado, modifique o ficheiro logging.properties da seguinte forma:
## This tracks the lifecycle events of each grpc channel
io.grpc.ChannelLogger.level=FINEST
## Tracks channel pool events(resizing, shrinking) from GAX level
com.google.api.gax.grpc.ChannelPool.level=FINEST
Além disso, atualize o nível de registo de saída em logging.properties para capturar estes registos:
# This could be changed to a file or other log output
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
Aplique a configuração
logging.properties pode ser aplicado através de um de dois métodos:
1. Através de uma propriedade do sistema JVM
Adicione este argumento ao iniciar a aplicação Java:
-Djava.util.logging.config.file=/path/to/logging.properties
2. Carregue de forma programática
Este método é útil para testes de integração ou aplicações em que a configuração de registo é gerida no código. Certifique-se de que este código é executado no início do ciclo de vida da aplicação.
LogManager logManager = LogManager.getLogManager();
try (final InputStream is = Main.class.getResourceAsStream("/logging.properties")) {
logManager.readConfiguration(is);
}
Exemplo de registo
Depois de ativar o registo detalhado, vê uma combinação de mensagens de com.google.api.gax.grpc.ChannelPool e io.grpc.ChannelLogger:
Canais com aprovisionamento insuficiente que acionaram a expansão do conjunto de canais:
09:15:30.123 [pool-1-thread-1] DEBUG com.google.api.gax.grpc.ChannelPool - Detected throughput peak of 40, expanding channel pool size: 4 -> 6.
09:15:30.124 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.ChannelLogger - [Channel<5>: (datastore.googleapis.com:443)] Entering IDLE state
09:15:30.124 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.ChannelLogger - [Channel<6>: (datastore.googleapis.com:443)] Entering IDLE state
09:15:30.125 [grpc-nio-worker-ELG-1-5] TRACE io.grpc.ChannelLogger - [Channel<5>: (datastore.googleapis.com:443)] newCall() called
09:15:30.126 [grpc-nio-worker-ELG-1-5] DEBUG io.grpc.ChannelLogger -