Dashboard ServerConf
Índice
Conceito
O monitoramento da saúde de um servidor de aplicação consiste em acompanhar como o serviço utiliza os recursos do servidor, como memória, threads, conexões com o banco de dados, subprocessos e caches, e quais eventos relevantes foram registrados durante o seu funcionamento. Com essas informações, é possível identificar a causa de lentidões, antecipar situações que afetariam os usuários e ajustar as configurações com base no uso real do sistema.
O que é
O Dashboard é a tela inicial do PHServerConf, exibida logo após o login e disponível no menu lateral. Identificado pelo título Saúde do servidor, ele reúne em uma única página o estado do processo do serviço do servidor de aplicação no momento da consulta, nos blocos Processo, Conexões dos pools, Subprocessos e Caches agora, e o histórico dos eventos registrados nos logs nos últimos 8 dias, no bloco Eventos.
Para que serve
O Dashboard serve para:
- acompanhar o uso de memória, threads e conexões do servidor de aplicação;
- verificar se o pool de conexões de cada base de dados atende a demanda;
- acompanhar os subprocessos, as execuções de agendamentos e os relatórios em geração;
- avaliar o aproveitamento dos caches e limpá-los quando necessário;
- identificar requisições lentas, transações abertas, consultas não liberadas e erros, com os horários e as bases de dados em que ocorrem.
Quais os benefícios e/ou ganhos de uso
- Diagnóstico rápido: As principais informações de saúde do servidor ficam reunidas em uma tela acessada pelo navegador, sem a necessidade de acesso ao servidor.
- Prevenção: Pool cheio, transações abertas, subprocessos sem sinal e taxa de acerto baixa nos caches ficam em destaque, permitindo agir antes que os usuários sejam afetados.
- Configuração baseada no uso real: O pico de conexões, as conexões fora do pool e a ocupação dos subprocessos orientam o ajuste do pool de conexões, da permanência e da quantidade de subprocessos.
- Análise de lentidão: Os eventos de requisição lenta informam o procedimento, os dados tratados, o tempo gasto no banco de dados e a quantidade de consultas, o que direciona a investigação.
- Apoio ao suporte: As informações podem ser consultadas durante o atendimento, cada uma com o horário da leitura.
Funcionamento
Os blocos Processo, Conexões dos pools, Subprocessos e Caches agora apresentam o estado do processo do serviço que atendeu a página no momento da leitura. Cada bloco informa o horário da leitura e possui o botão Atualizar, que faz uma nova leitura. Os indicadores do bloco Processo são lidos junto com o bloco Caches agora e atualizados pelo botão Atualizar dele, e a composição da memória privada e a lista de threads possuem botões Atualizar próprios.
O bloco Eventos é montado na abertura da página com os eventos dos últimos 8 dias, incluindo o dia atual, e é atualizado ao recarregar a página. O topo da tela informa a janela de dias e o momento em que essas informações foram geradas.
Quando mais de um servidor de aplicação utiliza a mesma base de dados do PHServerConf, os blocos de estado apresentam o processo do servidor que atendeu a página, e os eventos reúnem os logs gravados por todos os processos, incluindo os subprocessos.
As listas mais longas iniciam recolhidas, com um resumo ao lado do título, e são abertas pela seta ou por um clique no título. Nas listas de threads e de subprocessos, os itens semelhantes são agrupados em uma única linha, com a quantidade e os totais, que também pode ser expandida. As listas com mais de 10 linhas são paginadas, com os botões Anterior e Próxima, e a página exibida é mantida ao atualizar.
Exemplos
- Pool de conexões insuficiente: Uma base de dados aparece no início da lista de conexões com a barra de uso em destaque, indicando pool cheio, conexões avulsas, valores em Fora do pool a cada varredura e o Pico acima do limite. O campo Pool de Conexões do cadastro da base de dados está abaixo da demanda, e o valor do pico indica o tamanho que atenderia o momento de maior uso. A alteração no cadastro da base de dados vale após reiniciar o serviço.
- Rotina lenta: Eventos REQUISICAO_LENTA com a mesma origem se repetem ao longo do dia, informando que a requisição levou vários segundos, a maior parte no banco de dados, em mais de mil consultas. O tempo está no volume de consultas realizadas para cada registro processado. Quando poucas consultas concentram o tempo, a mensagem informa a consulta mais lenta, que é o ponto de partida para a análise de índices.
- Transação aberta: A coluna Transação aberta de uma base de dados apresenta valor acima de zero: um procedimento terminou sem confirmar ou cancelar a transação, e o pool a cancelou. Os eventos TRANSACAO_ABERTA, nos Últimos eventos e na tela Logs, informam o procedimento de origem.
- Crescimento de memória: A memória do processo aumenta ao longo do dia. Na composição da memória privada, o crescimento em Heaps do Windows corresponde à memória das bibliotecas nativas, como o cliente do banco de dados, liberada conforme as conexões do pool são renovadas. O crescimento nas partes do gerenciador corresponde a objetos do próprio servidor, e o bloco Caches agora e a lista Datasets ativos nas conexões mostram onde eles estão.
- Eventos fora do horário de trabalho: O mapa de ocorrências por hora concentra eventos durante a madrugada. Eles vêm de rotinas automáticas, como os agendamentos, e a coluna Origem dos últimos eventos informa o procedimento que os gerou.
- Base de dados restaurada ou alterada diretamente no banco: Após restaurar uma cópia da base de dados ou alterar diretamente no banco as definições dos cadastros, o botão Limpar base, com a base selecionada no bloco Caches agora, descarta os itens dessa base, que são reconstruídos no próximo uso.
Blocos e indicadores
Processo
Informações do processo do serviço que atendeu a página:
- Memória do processo: Memória privada em uso pelo processo, a mesma informação da coluna Memória do Gerenciador de Tarefas do Windows, com a memória residente e a comprometida na nota.
- Alocado pela aplicação: Parte da memória ocupada pelos objetos do sistema, incluindo os caches, com o total reservado pelo gerenciador de memória para alocação.
- Threads: Quantidade de threads do processo e de handles abertos.
- No ar desde: Momento em que o serviço foi iniciado e há quanto tempo está em execução.
Composição da memória privada: Barra que divide a memória privada em partes, com o total ao lado do título. A tabela, recolhida por padrão, apresenta o tamanho em MB, o percentual sobre a memória privada e a descrição de cada parte. Quando a soma das partes difere do total em meio megabyte ou mais, uma nota de conferência abaixo da tabela apresenta as medições utilizadas na conta.
| Parte | O que é |
|---|---|
| Gerenciador: em uso nos pools | Objetos e textos em uso pelo servidor, de até 256 KB cada, incluindo os caches. |
| Gerenciador: livre nos pools | Memória reservada pelo gerenciador de memória e ainda sem objetos, decorrente da fragmentação. |
| Gerenciador: blocos grandes | Alocações acima de 256 KB, como datasets, JSON e buffers. |
| Heaps do Windows | Memória das bibliotecas nativas, como o cliente do banco de dados, o OpenSSL e o driver ODBC. |
| Pilhas das threads | Parte comprometida das pilhas das threads do processo. |
| Dados do executável | Variáveis globais e tabelas do programa. |
| Não classificado | Memória privada fora das demais partes. |
Threads: Lista, recolhida por padrão, das threads do processo, com a quantidade por origem ao lado do título. Os botões de origem filtram a lista e informam a quantidade de threads de cada origem.
- Nome: Nome atribuído à thread pelo servidor de aplicação; as threads sem nome são identificadas como sem nome.
- Origem: Local em que a thread foi iniciada: Servidor, o executável do servidor de aplicação; Driver do banco, as bibliotecas cliente dos bancos de dados; Sistema, as bibliotecas do Windows; Biblioteca, as demais bibliotecas; ou Desconhecida.
- Módulo: Arquivo em que a thread foi iniciada. Nas threads sem nome, inclui a posição da função inicial, que identifica a mesma thread em leituras diferentes.
- CPU: Tempo de CPU consumido pela thread.
- Criada: Há quanto tempo a thread foi criada.
Threads com a mesma origem e o mesmo nome, variando apenas a numeração ou a palavra após os dois-pontos, como o nome da base de dados, são agrupadas em uma linha com a quantidade, a CPU somada, a maior CPU e a idade da mais antiga.
Conexões dos pools
Conexões com o banco de dados mantidas pelo processo do serviço para cada base de dados, no pool das bases de dados do ERP e no pool da base de dados do PHServerConf, identificado como ServerConf. Quando o pool está cheio, a requisição é atendida por uma conexão avulsa, aberta e fechada somente para ela; em grande volume, isso torna as requisições mais lentas e pode esgotar as portas do servidor.
A varredura do pool ocorre a cada 5 minutos e fecha as conexões paradas além do tempo de permanência. Cada conexão é utilizada por até 60 minutos: ao completar esse tempo, ela é fechada quando devolvida ao pool ou, se estiver parada, na varredura, e outra é aberta quando necessário. O cabeçalho do bloco informa o horário da leitura, o horário da última varredura e o total de conexões em uso, e as bases de dados com alerta (pool cheio, conexão avulsa, conexões fora do pool ou transação aberta) aparecem no início da lista.
- Base: Nome da base de dados, com o tempo de permanência das conexões paradas no pool.
- Uso do pool: Barra com as conexões em uso, as abertas paradas e as vagas até o limite, em destaque quando o pool está cheio. A base de dados com o campo Pool de Conexões zerado é identificada como sem pool.
- Em uso / abertas / limite: Conexões em uso, conexões abertas e o limite do pool, definido no campo Pool de Conexões do cadastro da base de dados, contando as que estão sendo abertas. As conexões avulsas existentes no momento aparecem abaixo dos números.
- Pico: Maior quantidade de conexões usadas ao mesmo tempo desde o início do serviço, somando as do pool e as avulsas, com o horário em que ocorreu. Fica em destaque quando ultrapassa o limite; nesse caso, o valor indica o tamanho de pool que atenderia aquele momento sem conexões avulsas.
- Fora do pool: Conexões avulsas criadas por falta de vaga no pool desde a última varredura, em destaque quando há alguma, e o total desde o início do serviço.
- Transação aberta: Quantidade de conexões da base de dados devolvidas com transação aberta nas últimas 24 horas, em todos os processos, incluindo os subprocessos. O pool cancela a transação, e o procedimento responsável fica registrado no log com o tipo TRANSACAO_ABERTA.
Datasets ativos nas conexões: Lista, recolhida por padrão, dos datasets existentes nas conexões do processo, com a quantidade de datasets, de conexões e a memória estimada ao lado do título. São apresentados os 40 maiores em memória, e os demais são somados em uma linha ao final.
- Base · conexão: Base de dados e conexão a que o dataset está ligado.
- SQL ou tabela: Comando SQL ou tabela do dataset.
- Estado: Aberto ou fechado.
- Linhas: Quantidade de linhas carregadas.
- B/linha: Tamanho médio de cada linha, em bytes.
- ≈ MB: Memória aproximada ocupada pelo dataset.
Subprocessos
Processos que o serviço mantém separados do processo principal e que atendem todas as bases de dados: os processos executados em subprocesso, os subprocessos de execução dos agendamentos e os subprocessos de geração dos relatórios. A memória dos subprocessos é apresentada neste bloco, separada da memória do bloco Processo.
- No ar: Quantidade de subprocessos em execução.
- Memória somada: Memória de todos os subprocessos, a mesma informação do Gerenciador de Tarefas do Windows, com a memória comprometida na nota.
- CPU somada: Tempo de CPU consumido pelos subprocessos desde que cada um foi iniciado.
- Execuções agora: Execuções de agendamentos em andamento, com a quantidade de subprocessos de execução no ar e a quantidade configurada.
- Relatórios agora: Relatórios em geração, com a quantidade de subprocessos de relatórios no ar e a quantidade configurada.
A lista dos subprocessos apresenta:
- Tipo: Processo, para os processos executados em subprocesso, como os lotes de geração de Json e a manutenção do banco de dados; Agendamento, para os subprocessos de execução dos agendamentos; ou Relatório, para os subprocessos de geração dos relatórios. Os subprocessos de agendamento e de relatório são agrupados por tipo, com a memória somada e a maior entre eles.
- O que roda: O que o subprocesso está executando.
- PID: Identificador do processo no Windows.
- No ar há: Tempo desde que o subprocesso foi iniciado.
- Memória: Memória do subprocesso, a mesma informação exibida no Gerenciador de Tarefas do Windows.
- CPU: Tempo de CPU consumido pelo subprocesso.
As listas Subprocessos de execução dos agendamentos e Subprocessos de geração dos relatórios, recolhidas por padrão, apresentam um resumo ao lado do título e as colunas:
- Subprocesso: Número e PID do subprocesso.
- Situação: Subindo, no ar sem trabalhos, rodando, com a quantidade de trabalhos, ou saindo, com o motivo da saída.
- Execuções ou Relatórios: Quantidade de execuções de agendamentos ou de relatórios em andamento no subprocesso.
- Último sinal: Há quanto tempo o subprocesso enviou o último sinal ao serviço, em destaque após 90 segundos. O subprocesso envia um sinal a cada 30 segundos; sem sinal por 3 minutos, o serviço o encerra e inicia outro.
- Troca: Quando o subprocesso será trocado pelo tempo de vida definido nas Configurações.
Quando a quantidade de subprocessos de um conjunto é 0 nas Configurações, a lista informa que o trabalho é executado no próprio serviço.
- Execuções em andamento: Lista, recolhida por padrão, com a base de dados, o agendamento, o subprocesso que o executa e há quanto tempo. A execução que ultrapassa o tempo esperado para o seu tipo fica em destaque e continua em execução.
- Relatórios em andamento: Lista, recolhida por padrão, com a base de dados, o usuário, o pedido (PDF, planilha, relatório para o desktop, Prever do botão ou anexo do e-mail), o subprocesso que o gera e há quanto tempo.
Cada execução e cada relatório são enviados ao subprocesso menos ocupado do seu conjunto. Na troca, por tempo de vida ou por uso de memória, outro subprocesso é iniciado no lugar; quando ele fica pronto, o subprocesso trocado deixa de receber trabalhos e é encerrado quando os que estão em andamento terminam. O relatório que ultrapassa 30 minutos retorna com erro para quem o solicitou, e o subprocesso dele é trocado.
Caches agora
Estado dos caches em memória do processo no momento da consulta. Os caches guardam definições utilizadas pelo sistema, como o Json e a estrutura dos cadastros, as telas da web e os arquivos de relatório, e são preenchidos no primeiro uso pelo PHERP. Faltas que só aumentam indicam invalidação em excesso, e a base de dados que atinge o teto perde itens por falta de espaço, e não por validade.
- Itens em memória: Quantidade de itens guardados nos caches, com o número de caches e de bases de dados.
- Texto de origem: Tamanho do conteúdo (JSON) que gerou os itens em memória.
- Taxa de acerto: Percentual das buscas atendidas pelo cache desde o início do serviço, em destaque abaixo de 90%.
- Aguardando liberação: Itens com descarte adiado, liberados em até 120 segundos.
O seletor de base filtra os indicadores e a lista. O botão Limpar base, habilitado com uma base de dados selecionada, limpa os caches dessa base, e o botão Limpar tudo limpa os caches de todas as bases. As duas ações pedem confirmação, e os itens são reconstruídos no próximo uso.
Caches por base: Lista, recolhida por padrão, com uma linha por cache e base de dados:
- Cache: Nome do cache.
- Base: Base de dados.
- Itens: Quantidade de itens em memória.
- Teto: Quantidade máxima de itens por base de dados, quando definida.
- Origem: Tamanho do texto de origem dos itens.
- Acertos e Faltas: Buscas atendidas pelo cache e buscas que precisaram montar o item.
- Taxa: Percentual de acerto, em destaque abaixo de 90%.
- Expirados: Itens descartados ao atingir a validade.
- Por teto: Itens descartados por falta de espaço.
- Adiados: Itens aguardando liberação.
Eventos
Resumo dos eventos gravados nos logs nos últimos 8 dias, incluindo o dia atual. Cada evento possui um tipo:
- GERAL: Demais mensagens do sistema, como erros na execução de procedimentos.
- VAZAMENTO_QUERY: Consulta criada por um procedimento e não liberada. O pool desvincula a consulta da conexão para não afetar a próxima requisição.
- TRANSACAO_ABERTA: Conexão devolvida ao pool com transação aberta. O pool cancela a transação, e o que estava pendente é descartado.
- REQUISICAO_LENTA: Requisição que ultrapassou o tempo definido em Registrar requisição lenta acima de, nas Configurações. A mensagem informa o procedimento, o cadastro, a tabela e o registro tratados, quando a requisição os informa, o tempo total, o tempo gasto no banco de dados, a quantidade de consultas, o usuário e, quando alguma consulta ultrapassa 200 milissegundos, a consulta mais lenta.
E uma severidade: INFO, ALERTA ou ERRO.
- Indicadores: Eventos e Transação aberta informam a quantidade de eventos e de transações abertas nas últimas 24 horas. Bases atingidas e Sessões atingidas informam quantas bases de dados e sessões tiveram eventos de vazamento de query, transação aberta ou requisição lenta nesse período.
- Ocorrências por hora do dia: Mapa com a quantidade de eventos em cada hora do dia, somando os 8 dias, em tons que vão de menos a mais eventos; a quantidade de cada hora aparece ao posicionar o mouse. Permite separar erros de uso, no horário de trabalho, de erros de rotinas automáticas, fora dele.
- Eventos por dia: Gráfico com a quantidade de eventos de cada dia, separada em vazamento de query, transação aberta e geral, que reúne os demais tipos, inclusive as requisições lentas. O total aparece acima de cada barra.
- Últimos eventos: Os 20 eventos mais recentes, com código, data e hora, tipo, severidade, origem, base de dados e os primeiros 400 caracteres da mensagem. A mensagem completa está na tela Logs.
Conclusão
O Dashboard reúne, em uma única tela, as informações necessárias para acompanhar a saúde do servidor de aplicação: o uso de memória e de conexões, os subprocessos, os caches e os eventos registrados nos logs. A consulta frequente, principalmente após atualizações e nos períodos de maior uso, permite identificar e tratar as situações antes que afetem os usuários, e ajustar as configurações do servidor de aplicação com base no uso real.
Sugestão de Leitura
Assuntos Relacionados