Histórico da Página
Checklist de configurações a serem realizadas nos ambientes Datasul para mitigar problemas como:
- Performance
- Queda de serviços
- Sobrecarga de servidores
- Mau funcionamento em geral
Índice |
---|
Checklist configurações Datasul
Estas validações se aplicam ao Datasul com qualquer banco de dados.
ID | O que | Por que | Como | |||||
---|---|---|---|---|---|---|---|---|
1 | Desativar logs na tabela de Programas do Menu Datasul | Quando ativado, este flag dispara a geração de logs extensos, que podem comprometer o desempenho geral do backend (camada Progress, tanto Client como Appserver/PASOE). Recomenda-se manter desativado. Somente ativar casos de exceção, mediante alinhamento com a consultoria/suporte. | Em um editor Progress conectado aos bancos de dados: Para consultar: output to c:\temp\log_gera_log_exec.txt. Para desativar: FOR EACH prog_dtsul exclusive-lock: | |||||
2 | Configurar utp/ut-apsv-sessionclear.r nos eventos do Appsever
| Este processo é um Garbage Collector. Ele realiza a limpeza da memória dos agentes do Appserver/PASOE ao final de cada requisição, retirando objetos sem uso, evitando locks, travamentos e sobrecarga de recursos do servidor. | Appserver clássico (Progress 11) No arquivo ubroker.properties, configurar estes parâmetros junto a cada Broker consumido pelo Datasul (menu, Automação de Tarefas Datasul e quaisquer outros processos que utilizem Broker Escalável): srvrDisconnProc=utp/ut-apsv-sessionclear.r srvrShutdownProc=utp/ut-apsv-sessionclear.r Na tela do Progress Admin Services, aparece desta forma: PASOE (Progress 12) No arquivo conf/openedge.properties (na instância do PASOE) configurar estes parâmetros: sessionDisconnProc=utp/ut-apsv-sessionclear.r | |||||
3 | Configurar Operating Mode do Appserver (apenas Progress 11) | Quando este parâmetro está incorreto, a comunicação entre o Frontend (Tomcat) e o Backend (Appserver) não opera corretamente, podendo causar gargalos, sobrecarga e perda de requisições. | Valor correto (ubroker.properties / Progress Admin Services): operatingMode=State-reset | |||||
4 | Garantir que a variável de ambiente JAVA_HOME esteja corretamente setada no servidor onde é executado o Appserver/PASOE | O backend do Datasul possui alguns processos que realizam chamada direta a programas em Java (ex: utils/TotvsCompactador.jar, entre outros). As chamadas dependem desta variável de ambiente para executarem corretamente. | Windows Definir junto às variáveis de ambiente do sistema. Ex: JAVA_HOME=c:\Java\jdk-11.0.11 Linux No Linux cada distro pode possuir particularidades, mas de modo geral as variáveis de ambiente são definidas no arquivo /etc/environment. Ex: JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.14.0.9-1.el7_9.x86_64" | |||||
5 | Configurações de performance no script.pf de conexão aos bancos de dados | Diversos parâmetros podem afetar o desempenho do sistema a nível de cache, buffers, tamanho de segmentos de memória, etc. | Resumo dos parâmetros mais impactantes: -l 50000 Mais detalhes aqui: https://centraldeatendimento.totvs.com/hc/pt-br/articles/360034643513-Framework-Linha-Datasul-TEC-Configura%C3%A7%C3%A3o-do-Appserver-Progress-para-o-Datasul-for-THF | |||||
6 | Parâmetro -q no script.pf | A presença do parâmetro -q no seu script.pf de conexão as bancos de dados irá aprimorar a performance. Isso reduzirá no I-O a cada vez que um binário Progress é chamado, pois ele é salvo na memória RAM e reutilizado, sem ser buscado novamente do disco em chamadas posteriores.
| No arquivo.pf de conexão aos bancos de dados, garantir que exista esta linha: -q | |||||
7 | Tamanho dos logs do Appserver (apenas Progress 11) Para Progress 12, consulte o item 14. | Muitas vezes o log do Appserver está muito grande (Gigabites), causando alto consumo de I-O, e deteriorando a performance geral do sistema. Recomenda-se limitar o tamanho máximo de um log de Appserver em 15MB. Essa mesma técnica pode ser aplicada para o clientlog de sessões Client Progress e RPW. Atenção também para sempre apontar a geração do arquivo para o disco do mesmo servidor onde o Appserver/PASOE é executado, e não para caminhos de rede, o que pode comprometer o desempenho. | https://knowledgebase.progress.com/articles/Article/000051593 | |||||
8 | Configurar timeout da sessão | Quando os usuários abrem diversas telas do sistema e esquecem de encerrá-las ao concluírem sua atividade, os recursos do Sistema Operacional (processamento, memória, banco de dados) continuam alocados desnecessariamente. É importante configurar o Timeout para que as sessões sejam encerradas automaticamente após determinado tempo de inatividade, evitando sobrecarga de recursos. | Podem ser adotadas duas abordagens:
Obs: O timeout se aplica apenas para telas abertas na estação do usuário. Já os processos RPW não são afetados por este controle de timeout. | |||||
9 | Configurações de performance para deploy do Tomcat | A instalação default do Tomcat prevê a utilização de diversos recursos que não são necessários para o Datasul. As recomendações deste artigo reduzem consideravelmente o volume de processamento, consumo de recursos e tempo de carga da instância do Tomcat com Datasul | Configuração de Performance Tomcat x Datasul | |||||
10 | Gerenciar espaço em disco no servidor do Tomcat | Os diversos aspectos relacionados à gestão dos servidores, inclusive o espaço em disco, são de responsabilidade da infraestrutura do cliente e/ou consultoria de infraestrutura contratada. Ainda assim, para prevenir esgotamento de disco, algumas orientações úteis podem ser passadas ao cliente:
Alguns ofensores conhecidos que podem gerar volume considerável de arquivos na pasta temp:
| Cada cliente pode definir sua política de governança dos servidores. Recomenda-se utilizar serviços de agendamento/cron para realizar o saneamento de arquivos antigos / temporários / desnecessários e garantir que o disco nunca fique esgotado, pois isso ocasionará parada do sistema. | |||||
11 | Configurar as permissões do usuário de serviço do Tomcat | Assim como os demais serviços que compõem o produto Datasul, o Tomcat deve ser configurado no servidor do cliente para ser executado com permissão de administrador. Caso falte qualquer permissão de escrita durante a usa execução, implicará em mau funcionamento do sistema. Isso se aplica tanto para Windows como Linux. Exemplo que já vimos ocorrer: caso durante a instalação o usuário estiver com seu próprio login, e não Administrador/root, corre-se o risco de o serviço ficar instalado no sistema operacional com o login do próprio usuário. Isso pode gerar a sensação de que a instalação está funcionando corretamente nos primeiros testes unitários, e apresentar erros de permissão posteriormente, ao subir o serviço em produção. Por isso, é importante ter atenção especial no momento da configuração. | Windows
Linux
| |||||
12 | Riscos de enviar arquivos.war ao cliente | Assim como qualquer programa Progress enviado ao cliente de forma "avulsa", um arquivo.war também corre riscos de desestabilização de processos. Quando ocorrer esta necessidade, sempre ter em mente:
|
Checklist configurações Datasul com banco de dados Oracle (Schema Holder)
Além das validações acima, é fundamental checar estes pontos para clientes com banco de dados Oracle.
Cada conexão a um banco de dados no Oracle consome uma sessão, que fica aberta durante todo o escopo do programa.
Isto se aplica tanto para usuários que abrem tela GUI (tela Progress) como Agentes de Appserver.
Exemplos:
- Se o Datasul está configurado com 10 bancos e tivermos 10 usuários conectados, isso se reflete em 100 sessões.
- Se somarmos à configuração acima mais 10 agentes de Appserver, chegaremos a 200 sessões.
- Se um usuário já tem uma sessão em aberto, e ele abrir mais uma sem fechar a anterior, chegaremos a 210 sessões.
Portanto, o número sugerido neste parâmetro é uma configuração que se aplica à grande maioria dos casos, mas deve ser bem dimensionado com clientes com muitos usuários e agentes de Appserver.
Executar em uma sessão conectada ao banco de dados Oracle, com privilégios de administrador:
select * from v$parameter p where p.name in ('open_cursors','processes','sessions')Se o resultado for inferior a:
open_cursors: 30000processes: 4000
sessions: 6024
Então os referidos parâmetros devem ser ajustados para esses valores, com os seguintes comandos:
alter system set open_cursors=30000 scope=both sid='*';alter system set processes=4000 scope=spfile;
alter system set sessions=6024 scope=spfile;
13 | Configurar serviço OpenOffice | Há processos que rodam na camada Progress que fazem chamada a apis do Java via Sistema Operacional, que por sua vez consomem um serviço OpenOffice que precisa estar sempre disponível e visível na rede, tanto para o servidor do PASOE como para as estações finais.
Quando este serviço não estiver no ar, os processos ficarão travados, segurando sessões do PASOE, podendo causar lentidão, esgotamento de recursos e travamentos perceptíveis ao usuário final. | Instalar o OpenOffice em um servidor visível à toda a rede. Configurar o serviço para ficar sempre disponível em uma porta pré-definida, como por exemplo:
O SERVIDOR e PORTA setados acima devem ser configurados na tela de Parâmetros Globais (hcg.globalParameters): |
14 | Controlar tamanho dos logs do PASOE (Progress 12) | Diferente do AppServer do Progress 11, no PASOE do Progress 12 não existe configuração nativa para quebra automática dos logs baseado no tamanho dos arquivos. Para contornar, siga as orientações do artigo ao lado. |
Checklist configurações Datasul com banco de dados Oracle (Schema Holder)
Além das validações acima, é fundamental checar estes pontos para clientes com banco de dados Oracle.
ID | O que | Por que | Como |
---|---|---|---|
101 | Checar open_cursors | Cada conexão a um banco de dados no Oracle consome uma sessão, que fica aberta durante todo o escopo do programa. Isto se aplica tanto para usuários que abrem tela GUI (tela Progress) como Agentes de Appserver. Exemplos:
Portanto, o número sugerido neste parâmetro é uma configuração que se aplica à grande maioria dos casos, mas deve ser bem dimensionado com clientes com muitos usuários e agentes de Appserver. | Executar em uma sessão conectada ao banco de dados Oracle, com privilégios de administrador:
Se o resultado for inferior a: open_cursors: 30000 Então os referidos parâmetros devem ser ajustados para esses valores, com os seguintes comandos: alter system set open_cursors=30000 scope=both sid='*'; Obs: o listener do Oracle deve ser reiniciado para que as alterações tenham efeito.
|
102 | Checar o -c no .pf | No arquivo.pf de conexão aos bancos de dados, conferir o valor do parâmetro -c, que não deve ser inferior a: -c 10000
-db \\cxs-gcad-rep01\schemaholder\shemsfnd -ld shemsfnd -RO -db emsfnd -ld emsfnd -U susemsfnd/susemsfnd@squad -c 10000 Atenção para refletir os ajustes de .pf também na tabela EMSFND.BCO_EMPRES | |
103 | Erro de estouro de limite de 32k da linha no banco de dados | O Oracle Data Server (Schema Holder do Progress para comunicar com banco Oracle) possui uma limitação de 32k para o tamanho das linhas no banco. | Caso este erro se manifeste: https://community.progress.com/s/article/19074 Recomendamos reportar ao nosso canal de suporte, e adotar o seguinte paliativo:
Detalhes: https://community.progress.com/s/article/Error-6447-when-NLS-LANG-environment-variable-is-set |
Checklist configurações Autorizador Web e Foundation Saúde (Jboss)
Para clientes Saúde que utilizam Autorizador Web e/ou Foundation Saúde.
ID | O que | Por que | Como |
---|---|---|---|
201 | Configurações do pool Appserver x Jboss (Apenas para Progress 11 com Appserver clássico) | Caso as configurações do pool não estejam compatíveis nas duas pontas (Appserver e Jboss), a aplicação apresentará instabilidades. | No Appserver - entrar no Progress OpenEdge Explorer (http://<seu_servidor>:9090): Checar nas propriedades do Broker qual é o Operating Mode que está configurado. O recomendado é stateless: Checar nas propriedades do Agent o valor do campo Maximum servers: progress.server.mode=1 1 equivale a Stateless (este é o valor default). Seu valor deve estar compatível com o Operating Mode do Appserver (acima). for State-reset, então trocar para 2.
o número aqui deve ser igual ao Maximum servers do Appserver (conforme visto acima). Obs: Tanto Appserver como Jboss devem ser reiniciados caso algum dos parâmetros seja alterado. Referência: Documentação "datasul_framework.properties" |
202 | Tamanho máximo do HTTP POST | Se não estiver corretamente configurado, este parâmetro pode limitar o tamanho da mensagem trafegada no Foundation Saúde, interrompendo a comunicação. Exemplo de problema frequente: guias trafegando normalmente quando tiverem até 6 procedimentos, e começarem a falhar quando tiver mais que 6 procedimentos. | No arquivo .../deploy/jboss-web.deployer/server.xml da instalação do Jboss, acrescentar os atributos:
Obs: este valor é configurado em bytes. O valor "-1" indica que o tamanho será ilimitado. Exemplo: Dica: se hoje esta configuração não estiver preenchida, e não estão sendo observados problemas, significa que a limitação default (2MB) é suficiente. Para evitar o risco de configurar com "-1" e receber anexos muito grandes, que possam comprometer o processo, o parâmetro pode ser configurado com uma certa margem (ex: 4 ou 8MB). Mais informações: https://docs.jboss.org/jbossweb/7.0.x/config/http.html |
203 | Configurar utp/ut-apsv-sessionclear.r nos eventos do Appsever | Este processo realiza a limpeza da memória dos agentes do Appserver/PASOE ao final de cada requisição, evitando locks, travamentos e sobrecarga de recursos. | Mesma ação do item 2 deste documento. |
204 | Ao virar para Progress 12, atualizar as libs de comunicação do Jboss com o backend. | A mudança de tecnologia do Progress 11 para 12 exigiu ajustes em libs de comunicação entre as camadas. Atenção especial para o artefato datasul-saude-connection-progress-11.5.9.jar (.../jboss/server/default/lib). Se a sua versão for anterior a 20/10/2023, atualize imediatamente, sob risco de alocação total das sessões do PASOE, gerando travamento do sistema, que só se resolve com reinicialização, e o problema torna a ocorrer em pouco tempo. | Detalhes neste documento: DT Autorizador e Foundation com Progress 12 |
205 | Dimensionar max-pool-size das conexões JDBC | Dependendo do volume de acessos e requisições, o pool dimensionado pode ser insuficiente, gerando erros no log do Jboss e recusando as transações. Neste caso recomenda-se aumentar o valor. | Nos arquivos progress-ds.xml (para clientes com banco Progress), oracle-ds.xml (para clientes com banco Oracle) e erp-ds.xml, que ficam na instalação do Jboss/server/default/deploy, revisar a tag <max-pool-size>. Exemplo: <?xml version="1.0" encoding="UTF-8"?> </datasources> |
Checklist configurações - Geral
Validações que se aplicam a qualquer aplicação.
ID | O que | Por que | Como |
---|---|---|---|
301 | Checar quantidade de processadores | Em situações com apenas 1 ou 2 processadores, já presenciamos o cenário de o cliente possuir diversos agentes de Appserver, mas a CPU não dar conta de executar processos em paralelo. Como efeito, 2 a 3 agentes acabam consumindo 100% de CPU, causando enfileiramento das atividades, e lentidão na percepção do usuário.
| Verificar o número de processadores virtuais da máquina. Se for Windows, pode ser verificado pelo Task Manager: |
Boas práticas e recomendações
ID | O que | Por que | Como |
---|---|---|---|
401 | Migrar RPW Clássico para o novo Automação de Tarefas Datasul (Task Manager) | Enquanto o RPW Clássico é executado em sessões Client Progress, o novo Automação de Tarefas Datasul (Task Manager) é executado em Appserver/PASOE, tornando a gestão mais simples, estável, incorporando novas funcionalidades e possibilitando a utilização do recurso de Broker Escalável. | Detalhes aqui: Configuração Automação de Tarefas Datasul - Novo RPW |
402 | Se o cliente possui aplicações próprias que consomem o Datasul via REST:
| Exemplo com Broker Escalável Digamos que o cliente possui no seu portal uma funcionalidade para os seus clientes Pessoa Física solicitarem a geração da 2a via de boletos, e que o vencimento é no dia 10 de cada mês. Isso abre margem para um pico de utilização deste recurso próximo à data de vencimento. Se a chamada desta customização estiver compartilhando o mesmo Appserver/PASOE do menu do Datasul, poderá ser percebida lentidão/travamento/indisponibilidade do sistema nos momentos de pico. Com o Broker Escalável, configura-se um Appserver/PASOE dedicado para a customização, sem comprometer o restante da operação. Exemplo com Tomcat Dedicado Seguindo o mesmo exemplo acima, digamos que há um momento de pico de utilização que está comprometendo a resposta do Tomcat do Datasul (menu interno, Portal Empresa, Auditoria Médica, etc). Isso pode caracterizar a necessidade de criação de uma instância do Tomcat dedicada apenas para as customizações do cliente. | TOTVS Broker Escalável |
403 | Avaliar as triggers customizadas | É importante validar se existem triggers customizadas em tabelas de alto volume de utilização, pois podem comprometer o desempenho geral do sistema, tanto em tempo de processamento como gerando locks desnecessários. | Para consultar as triggers do GPS: output to c:\temp\dztriggers.txt. Para consultar as triggers do ERP: output to c:\temp\tab_dic_dtsul.txt. Mais detalhes sobre o procedimento de configuração e ativação de triggers: Instruções_de_Atualização_Versão_GPS |
404 | Análise de Logs mais relevantes | O Tomcat gera diversos logs, cada um com objetivos diferentes. A nível de regra de negócio do Datasul, destaca-se o catalina.AAAA-MM-DD.log. Deploy Este log mostra se cada arquivo.war (pasta webapps) foi corretamente carregado na memória do sevidor (deploy) ou se ocorreram erros que impediram o deploy. Os erros mais comuns são:
Negócio Neste mesmo log pode-se identificar as requisições realizadas pela camada de tela (Frontend) ao Appserver/PASOE (backend). Ex: |
Obs: o listener do Oracle deve ser reiniciado para que as alterações tenham efeito.
Detalhes no item 28 do guia de instalação: Tutorial_de_Instalação_do_TOTVS_12_OracleNo arquivo.pf de conexão aos bancos de dados, conferir o valor do parâmetro -c, que não deve ser inferior a:
-c 10000
Exemplo da linha completa:-db \\cxs-gcad-rep01\schemaholder\shemsfnd -ld shemsfnd -RO -db emsfnd -ld emsfnd -U susemsfnd/susemsfnd@squad -c 10000
Atenção para refletir os ajustes de .pf também na tabela EMSFND.BCO_EMPRES
Caso este erro se manifeste: https://community.progress.com/s/article/19074
Recomendamos reportar ao nosso canal de suporte, e adotar o seguinte paliativo:
- Desativar a variável de ambiente NLS_LANG no seu Sistema Operacional.
Detalhes: https://community.progress.com/s/article/Error-6447-when-NLS-LANG-environment-variable-is-set
Checklist configurações Autorizador Web e Foundation Saúde (Jboss)
Para clientes Saúde que utilizam Autorizador Web e/ou Foundation Saúde.
No Appserver - entrar no Progress OpenEdge Explorer (http://<seu_servidor>:9090):
Checar nas propriedades do Broker qual é o Operating Mode que está configurado. O recomendado é stateless:Checar nas propriedades do Agent o valor do campo Maximum servers:
No Jboss - editar o arquivo: .../<pasta_instalacao_jboss>/server/<instance>/conf/datasul/datasul_framework.properties:
Verificar os seguintes campos:
progress.server.mode=1
1 equivale a Stateless (este é o valor default). Seu valor deve estar compatível com o Operating Mode do Appserver (acima). for State-reset, então trocar para 2.
progress.server.maxconnections=10o número aqui deve ser igual ao Maximum servers do Appserver (conforme visto acima).
Obs: Tanto Appserver como Jboss devem ser reiniciados caso algum dos parâmetros seja alterado.Referência: Documentação "datasul_framework.properties"
Se não estiver corretamente configurado, este parâmetro pode limitar o tamanho da mensagem trafegada no Foundation Saúde, interrompendo a comunicação.
Exemplo de problema frequente: guias trafegando normalmente quando tiverem até 6 procedimentos, e começarem a falhar quando tiver mais que 6 procedimentos.
No arquivo .../deploy/jboss-web.deployer/server.xml da instalação do Jboss, acrescentar os atributos:
- maxSavePostSize = "-1"
- maxPostSize = "-1"
Obs: este valor é configurado em bytes. O valor "-1" indica que o tamanho será ilimitado.
Exemplo:
Dica: se hoje esta configuração não estiver preenchida, e não estão sendo observados problemas, significa que a limitação default (2MB) é suficiente. Para evitar o risco de configurar com "-1" e receber anexos muito grandes, que possam comprometer o processo, o parâmetro pode ser configurado com uma certa margem (ex: 4 ou 8MB).
Mais informações: https://docs.jboss.org/jbossweb/7.0.x/config/http.html
Este processo realiza a limpeza da memória dos agentes do Appserver/PASOE ao final de cada requisição, evitando locks, travamentos e sobrecarga de recursos.
A mudança de tecnologia do Progress 11 para 12 exigiu ajustes em libs de comunicação entre as camadas.
Atenção especial para o artefato datasul-saude-connection-progress-11.5.9.jar (.../jboss/server/default/lib). Se a sua versão for anterior a 20/10/2023, atualize imediatamente, sob risco de alocação total das sessões do PASOE, gerando travamento do sistema, que só se resolve com reinicialização, e o problema torna a ocorrer em pouco tempo.
Checklist configurações - Geral
Validações que se aplicam a qualquer aplicação.
Em situações com apenas 1 ou 2 processadores, já presenciamos o cenário de o cliente possuir diversos agentes de Appserver, mas a CPU não dar conta de executar processos em paralelo.
Como efeito, 2 a 3 agentes acabam consumindo 100% de CPU, causando enfileiramento das atividades, e lentidão na percepção do usuário.
Recomenda-se que um servidor de Produção tenha ao menos 16 processadores.Verificar o número de processadores virtuais da máquina.
Se for Windows, pode ser verificado pelo Task Manager:
Boas práticas e recomendações
Se o cliente possui aplicações próprias que consomem o Datasul via REST:
avaliar utilização do recurso de Broker EscalávelExemplo com Broker Escalável
Digamos que o cliente possui no seu portal uma funcionalidade para os seus clientes Pessoa Física solicitarem a geração da 2a via de boletos, e que o vencimento é no dia 10 de cada mês.
Isso abre margem para um pico de utilização deste recurso próximo à data de vencimento.
Se a chamada desta customização estiver compartilhando o mesmo Appserver/PASOE do menu do Datasul, poderá ser percebida lentidão/travamento/indisponibilidade do sistema nos momentos de pico.
Com o Broker Escalável, configura-se um Appserver/PASOE dedicado para a customização, sem comprometer o restante da operação.
Exemplo com Tomcat Dedicado
Seguindo o mesmo exemplo acima, digamos que há um momento de pico de utilização que está comprometendo a resposta do Tomcat do Datasul (menu interno, Portal Empresa, Auditoria Médica, etc). Isso pode caracterizar a necessidade de criação de uma instância do Tomcat dedicada apenas para as customizações do cliente.
Para consultar as triggers do GPS:
output to c:\temp\dztriggers.txt.
FOR EACH dztriggers no-lock:
export dztriggers.
END.
output close.
Para consultar as triggers do ERP:
output to c:\temp\tab_dic_dtsul.txt.
FOR EACH tab_dic_dtsul no-lock:
export tab_dic_dtsul.
END.
output close.
Mais detalhes sobre o procedimento de configuração e ativação de triggers: Instruções_de_Atualização_Versão_GPS
O Tomcat gera diversos logs, cada um com objetivos diferentes.
A nível de regra de negócio do Datasul, destaca-se o catalina.AAAA-MM-DD.log.
Deploy
Este log mostra se cada arquivo.war (pasta webapps) foi corretamente carregado na memória do sevidor (deploy) ou se ocorreram erros que impediram o deploy.
Os erros mais comuns são:
- Falta de espaço em disco
- Arquivo.war está corrompido
Negócio
Neste mesmo log pode-se identificar as requisições realizadas pela camada de tela (Frontend) ao Appserver/PASOE (backend). Ex:
14-Apr-2023 17:11:16.225 INFO [datasul-exec-404] com.totvs.framework.rest.connector.APIDatasulConnector.processRequest TOTVS-REST API-DATASUL: Conectando appserver14-Apr-2023 17:11:16.225 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.getConnection Buscando conexao atual. companyId=120, userName=super, xTotvsApp=, xTotvsAlias=null, dbHistId=null, programName=hpr/api/v1/modalities, programType=api, appServer=null
14-Apr-2023 17:11:16.225 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.createConnection TOTVS-PROGRESS: Builded URL connection: http://cxs-squad-sus01:8825/apsv
14-Apr-2023 17:11:16.225 INFO [datasul-exec-404] com.totvs.framework. |
rest.connector. |
APIDatasulConnector.processRequest TOTVS-REST API-DATASUL: Conectando appserver |
225 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.getConnection |
Buscando conexao atual. companyId=120, userName=super, xTotvsApp=, xTotvsAlias=null, dbHistId=null, programName=hpr/api/v1/modalities, programType=api, appServer=null |
225 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager. |
14-Apr-2023 17:11:16.304
createConnection TOTVS-PROGRESS: Builded URL connection: http://cxs-squad-sus01:8825/apsv |
Realizada conexao em |
( |
0ms) |
241 INFO [datasul-exec-404] com.totvs.framework. |
progress.connector. |
ProgressConnectionManager.getConnection Iniciando autenticacao |
304 INFO [datasul-exec-404] com.totvs.framework. |
progress.connector. |
ProgressConnectionManager.authenticate Registrou log de execucao em: 16 ms |
304 INFO [datasul-exec-404] com.totvs.framework. |
progress.connector. |
Appserver/PASOE
No log do Appserver/PASOE é possível cruzar o trecho de log acima (frontend) com o backend que foi chamado:
2023-04-14T17:11:16.288-0300 020972 050324 2 AS-27 ?:?:? 4GLTRACE Run utp/ut-logexecapi.p "ProgressConnectionManager.getConnection Autenticado em: (63ms) |
2023-04-14T17
|
382 INFO [datasul-exec-404] com.totvs.framework.rest.connector.APIDatasulConnector.processRequest TOTVS-REST API-DATASUL: Retorno em (157ms) Appserver/PASOE No log do Appserver/PASOE é possível cruzar o trecho de log acima (frontend) com o backend que foi chamado: 2023-04-14T17:11:16.288-0300 020972 050324 2 AS-27 ?:?:? 4GLTRACE Run utp/ut-logexecapi.p "hpr/api/v1/modalities api" [registerLogExec - fwk/rest/authProgressApp.p @ 998] |
Open \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\utp\ut-logexecapi.r ID=595 |
2 AS-27 ?:?:? |
FILEID |
2023-04-
Close \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\utp\ut-logexecapi.r ID=595 | |||
405 | Reduzir timeout default para locks do banco de dados | Por default um Client/Agent Progress aguarda 30 minutos (1800 segundos) quando tenta acessar um registro que já está em lock. Para o caso de uma tela Client em que o usuário está interagindo isso não é um grande problema, visto que é apresentada uma mensagem perguntando se o usuário deseja aguardar ou cancelar a operação. Essa tela cancela a operação automaticamente se os 30 minutos se passarem sem interação do usuário. Já para um Agent do Appserver isso pode ser um transtorno, visto que o processo fica em lock mas não há feedback ao usuário, que fica com sensação de "tela lenta/travada" quando na verdade o agent está aguardando a liberação de um registro preso por outra transação. Isso pode induzir o usuário a abrir nova tela e tentar novamente, e isso sucessivamente vai prendendo mais agentes, correndo o risco de todos ficarem presos até que o timeout seja atingido em cada sessão. E neste período, todos os usuários ficam com sensação de "sistema caiu/indisponível". Para este cenário, pode ser útil reduzir este timeout para algo entre 1 e 5 minutos. Importante: caso haja alguma aplicação gerando um lock indevido, esta configuração não resolve o problema. Ela apenas ameniza o impacto aos demais usuários e processos enquanto o lock é investigado, reduzindo a chance de todos os agentes ficarem presos e o sistema completamente indisponível. | Parâmetro no arquivo.pf de conexão: -lkwtmo https://community.progress.com/s/article/16073 |
406 | Processos com Importação Parcial | O sistema possui alguns processos de importação de dados que podem ser pesados e executarem por várias horas. É importante alinhar com a área de negócio sobre a possibilidade de estes processos serem executados à noite via RPW, e também para utilizar processo de Importação Parcial (quando disponível). Com isso, o processo utilizará muitas transações pequenas ao invés de uma única transação grande, reduzindo consideravelmente o tempo de processamento e efeitos colaterais em outros processos, devido aos locks no banco de dados. Um exemplo deste tipo de processo é a Importação de A500 XML. | Alinhar cada caso com suporte / consultor de negócio. |
407 | Configuração inicial do PASOE | Documentação com maiores informações sobre a configuração inicial do PASOE | 8. Configurando o Progress Application Server OpenEdge (PASOE) |
Virada Progress 11 (AppServer clássico) para Progress 12 (PASOE)
A mudança do AppServer clássico para o PASOE não é trivial, especialmente no novo comportamento dos Agentes, que passam a ser multi-thread.
Como funcionam as Licenças Progress
408 | Configurar variáveis de ambiente para o Tomcat do Datasul | Existem dúvidas comuns ao tratar variáveis de ambiente para o produto. Criamos o artigo ao lado com esclarecimentos. | https://tdn.totvs.com/display/public/LDT/Como+criar+variaveis+de+ambiente+visiveis+ao+Datasul+no+Tomcat |
Virada Progress 11 (AppServer clássico) para Progress 12 (PASOE)
Este link contém a documentação oficial da Progress, com recomendações, boas práticas e descrição detalhada dos parâmetros do PASOE: https://docs.progress.com
No AppServer clássico cada agente consome 1 licença Progress, executando as requisições de modo single-thread (fila).
Logo, se você tem 10 licenças, vai usar 10 agentes.
No PASOE o agente passa a ser um controlador de múltiplas sessões. Cada sessão por sua vez passa a consumir uma licença.
Logo, se você tem 10 licenças, vai usar 1 agente com 10 sessões; ou 2 agentes com 5 sessões;
É importante frisar que o melhor desempenho (e consumo mais otimizado de hardware) é observado utilizando apenas 1 agente com o máximo de sessões disponíveis.
Detalhes:
https://docs.progress.com/pt-BR/bundle/pas-for-openedge-management/page/Configure-OpenEdge-properties.html
Os itens abaixo adicionam informações úteis que identificamos em testes internos e atendimento a clientes.
ID | O que | Por que | Como | ||
---|---|---|---|---|---|
501 | Atenção com o dimensionamento das Licenças Progress | A mudança do AppServer clássico para o PASOE não é trivial, especialmente no novo comportamento dos Agentes, que passam a ser multi-thread. | No AppServer clássico cada agente consome 1 licença Progress, executando as requisições de modo single-thread (fila). Logo, se você tem 10 licenças, vai usar 10 agentes. No PASOE o agente passa a ser um controlador de múltiplas sessões. Cada sessão por sua vez passa a consumir uma licença, e podem ser executadas de forma paralela (multi-thread). Logo, se você tem 10 licenças, vai usar 1 agente com 10 sessões; ou 2 agentes com 5 sessões; etc. Pode parecer lógico o seguinte raciocínio: se eu tinha 10 agentes no AppServer, terei 10 agentes no PASOE. Mas essa não é a melhor abordagem. O melhor desempenho (e consumo mais otimizado de hardware) é observado utilizando apenas 1 agente com o máximo de sessões (licenças) disponíveis. | ||
502 | Escalonamento automático de agentes | Este ponto pode gerar dúvidas comuns. A tela de configuração do PASOE não impede o usuário de preencher com parâmetros conflitantes, que irão gerar mau funcionamento. | Se, apesar da recomendação de usar apenas um agente com muitas sessões, o seu cenário prevê o uso de mais agentes de forma escalonada, a serem inicializados automaticamente sob demanda, tenha atenção especial a estes parâmetros:
É fundamental ter em mente que se Connection wait timeout for muito alto, vai gerar sensação de lentidão ao usuário final. E se for maior que Request wait timeout, é o pior cenário, pois nunca vai solicitar a adição automática de um novo Agente, ficando travado. | ||
503 | Relação entre Sessões e Conexões | Este é um novo controle criado no PASOE, e pode gerar dúvidas. |
| ||
504 | Proteteção contra loops infinitos | Em caso de falha de um processo, é preferível que a sessão encerre automaticamente e volte a ficar disponível no pool, ao invés de ficar presa, sob risco de esgotamento de recursos e parada total do sistema. | SessionExecutionTimeLimit: este é um parâmetro avançado, que não aparece na tela de gerenciamento do PASOE. Seu valor default é zero, o que indica que o controle não está ativo. Para alterá-lo, deve ser editado o arquivo conf/openedge.properties do seu PASOE. Quando informado, indica o número de segundos em que uma requisição deve abortar automaticamente, devolvendo a sessão para o pool. Exemplos de uso:
Quando este timeout exceder, será disparado o evento STOP. O log apresentará mensagens neste formato. Se ocorrer, deve-se avaliar se o parâmetro está muito baixo e deve ser recalculado, ou se deve ser acionado o suporte para avaliação do desempenho dos programas:
| ||
505 | Desativar monitoramento de alterações de dicionário | À partir do Progress 12 o monitoramento de alterações de dicionário é ligado por default (roda a cada 30 segundos), enquanto era desligado no Progress 11. Com isso, percebe-se um certo delay nas conexões. Visto que o produto Datasul não sofre alterações de dicionário com o produto no ar, apenas em janelas de atualização programadas, faz sentido desativar este monitoramento para incrementar performance e reduzir mensagens nos logs. | O referido delay está descrito neste artigo: https://community.progress.com/s/article/OE-12-2-performance-is-worse-than-OE-11-7-when-receiving-a-Temp-Table Neste outro artigo a Progress confirma que há um bug que não permite a desativação do parâmetro pela tela de configuração do PASOE: https://community.progress.com/s/article/usernotifytime-and-dbnotifytime-parameters-not-setting-to-0-under-oem Para contornar, os parâmetros "-usernotifytime 0 -dbnotifytime 0" devem ser adicionados no campo "Other arguments" de cada banco de dados: Ao desativar este monitoramento, o log do PASOE deixará de listar este tipo de mensagem a cada 30 segundos: 2024-06-17T07:26:53.768-0300 024104 024140 4 AS-ResourceMgr mtapsv:-:? CONN Setting attention flag for database 'srcadger', interval '30' | ||
506 | Desligamento automático de Sessões e Agentes ociosos | Por default, os timeouts ficam desativados, e com isso as Sessões e Agentes ociosos não são derrubados automaticamente. Ficam consumindo recursos sem necessidade. |
Artigo da Progress: https://community.progress.com/s/article/How-to-configure-PASOE-to-clean-up-idle-resources-automatically | ||
507 | Derrubar uma sessão do agente multi-thread do PASOE sem afetar as demais sessões em andamento | No AppServer clássico (1 agente por sessão) o PID de um processo travado pode ser derrubado pelo sistema operacional sem afetar as demais sessões. já no PASOE, por ser multi-thread, se o PID de um agente for derrubado, todas as sessões que ele administra serão afetadas, tornando inviável este procedimento. | Para derrubar apenas uma sessão de um agente multi-tread sem afetar as demais sessões:
|
Escalonamento automático de agentes
Este ponto pode gerar dúvidas comuns.
A tela de configuração do PASOE não impede o usuário de preencher com configurações conflitantes, que irão gerar mau funcionamento.
Se o seu cenário prevê o uso de mais agentes, a serem inicializados automaticamente sob demanda, tenha atenção especial a estes parâmetros:
Request wait timeout (milisegundos): indica o tempo em que uma requisição espera por uma Sessão. Ao exceder o tempo, a requisição é descartada. O default é 15000 (15 segundos). Dependendo da sua estrutura, pode ser recomendável aumentar lara 60000 (1 minuto).É fundamental ter em mente que se Connection wait timeout for muito alto, vai gerar sensação de lentidão ao usuário final. E se for maior que Request wait timeout, é o pior cenário, pois nunca vai solicitar a adição automática de um novo Agente, ficando travado.