Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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.

IDO quePor queComo
1Desativar 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.
FOR EACH prog_dtsul no-lock:
    IF prog_dtsul.log_gera_log_exec THEN do:
         export prog_dtsul.
    end.
END.
output close.


Para desativar:

FOR EACH prog_dtsul exclusive-lock:
    IF prog_dtsul.log_gera_log_exec THEN do:
         assign prog_dtsul.log_gera_log_exec = false.
    end.
END.

2

Configurar utp/ut-apsv-sessionclear.r nos eventos do Appsever


Informações
titleIMPORTANTE!

Não confundir com utp/ut-memoryclear.r, que realiza uma limpeza superficial, enquanto utp/ut-apsv-sessionclear.r realiza a limpeza completa.

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:

image.png


PASOE (Progress 12)

No arquivo conf/openedge.properties (na instância do PASOE) configurar estes parâmetros:

    sessionDisconnProc=utp/ut-apsv-sessionclear.r
    sessionShutdownProc=utp/ut-apsv-sessionclear.r

3Configurar 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

4Garantir que a variável de ambiente JAVA_HOME esteja corretamente setada no servidor onde é executado o Appserver/PASOEO 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"

5Configurações de performance no script.pf de conexão aos bancos de dadosDiversos 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
-mmax 50000
-s 20000
-Bt 32000
-tmpbsize 8
-q


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

6Parâ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.

Informações
titleATENÇÃO

Ao utilizar esse recurso, tenha ciência que, caso precise atualizar um binário (.r Progress), o ambiente precisará ser reiniciado (Appserver/PASOE, RPW, Sessão Progress) para que a nova versão seja considerada.

Recomenda-se seu uso em ambientes de Produção.

No arquivo.pf de conexão aos bancos de dados, garantir que exista esta linha:

-q
7Tamanho dos logs do Appserver (apenas Progress 11)

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

8Configurar 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.

CFG - Segurança#Timeout

Podem ser adotadas duas abordagens:

  1. Configurar timeout curto (ex: 20 a 30 minutos) e criar um Grupo de Exceção do Timeout (conforme doc do link acima) para colocar apenas os usuários que utilizam processos mais pesados e que nunca devem sofrer timeout.
    • É importante ter em mente que os usuários do grupo de Exceção NUNCA terão sua sessão encerrada automaticamente. Isso abre margem para telas serem "esquecidas" abertas, consumindo sessões e gerando locks no banco de dados por vários dias.

  2. Não criar grupo de exceção. Levantar qual é o processo mais pesado na rotina do cliente e configurar o Timeout proporcional, com alguma sobra. Exemplo: se o processo mais pesado demora 4 horas, então configurar o timeout para 5 horas (300 minutos).
    • É importante sempre executar processos pesados em RPW, e não na estação do usuário. 
    • Em caso de dúvida, recomenda-se acionar o suporte questionando pela versão em RPW para o processo em questão, e caso não exista, que seja solicitada sua implementação.


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.

9Configuraçõ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
10Gerenciar 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:

  • eventualmente eliminar arquivos temporários (por exemplo, durante a aplicação de um patch, aproveitando o momento em que o serviço está desligado):
    • Datasul
      • instancia-tomcat/logs
      • instancia-tomcat/temp
      • instancia-tomcat/work
    • Autorizador Web e Foundation Saúde
      • instancia-jboss/log
      • instancia-jboss/data
      • instancia-jboss/tmp
      • instancia-jboss/work


Alguns ofensores conhecidos que podem gerar volume considerável de arquivos na pasta temp:

  • Geração de boletos
  • Geração de relatórios
  • Arquivos que ficam disponíveis para download dos usuários

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.

11Configurar 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

    • É recomendável configurar explicitamente o administrador do servidor na aba Log On do Serviço do Windows correspondente ao Tomcat do Datasul:

      Esta configuração também pode ser feita por linha de comando (CMD):
    • sc config <NOME_SERVICO_WINDOWS> obj= "<DOMINIO>\<USUARIO>" password= "SENHA"
    • Naturalmente, deve-se garantir que este usuário tenha permissão total de escrita na estrutura de pastas onde o Tomcat está instalado.
       

Linux

    •  O grupousuário que controlará o Tomcat deve ser explicitamente identificado no script de start do serviço (exemplo de arquivo.service criado em /etc/systemd/system):


    • O usuário por sua vez deve ter permissão total na estrutura de pastas onde o Tomcat está instalado:
12Riscos 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:

  • O arquivo.war pode fazer chamadas ao backend com parâmetros pré-definidos. Se algum parâmetro estiver diferente, causará falha de comunicação.
  • O arquivo.war pode conter diversas aplicações. Logo, ao enviar o arquivo para contorno de um problema em específico, outras aplicações podem ser afetadas como efeito colateral.
    • Nestes casos, ao invés de realizar o build do .war e enviá-lo ao cliente, pode ser mais prudente baixar o .war que o cliente já possui (patch), editá-lo apenas com a alteração necessária, zipar novamente e enviar este resultado, para minimizar impactos.


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.

IDO quePor queComo
101Checar 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:

  • 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: 30000
processes: 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;

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_Oracle

102Checar 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


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

103Erro de estouro de limite de 32k da linha no banco de dadosO 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:

  • 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.

IDO quePor queComo
201Configuraçõ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:  




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=10

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" 

202Tamanho 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:

  • 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

203Configurar 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.
204Ao 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
205Dimensionar 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>
   <local-tx-datasource>
    <jndi-name>FoundationAutorizadorDS</jndi-name> 
      <connection-url>jdbc:datadirect:openedge://<SERVIDOR>:<PORTA>;databaseName=fndsau;WorkArounds=536870912</connection-url>
      <driver-class>com.ddtek.jdbc.openedge.OpenEdgeDriver</driver-class>
      <user-name>fndsau</user-name>
      <password>fndsau</password>
        <metadata>
            <type-mapping>Progress</type-mapping>
        </metadata>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>30</max-pool-size>
   </local-tx-datasource>

   </datasources>



Checklist configurações - Geral

Validações que se aplicam a qualquer aplicação.

IDO quePor queComo
301Checar 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.


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

IDO quePor queComo
401Migrar 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:

  • avaliar utilização do recurso de Broker Escalável

  • se o consumo for muito alto, considerar a utilização de um Tomcat dedicado

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
403Avaliar 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.
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

404Aná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:

  • 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 appserver
14-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.progress.connector.ProgressConnectionManager.getConnection Realizada conexao em (0ms)
14-Apr-2023 17:11:16.241 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.getConnection Iniciando autenticacao
14-Apr-2023 17:11:16.304 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.authenticate Registrou log de execucao em: 16 ms 
14-Apr-2023 17:11:16.304 INFO [datasul-exec-404] com.totvs.framework.progress.connector.ProgressConnectionManager.getConnection Autenticado em: (63ms)
14-Apr-2023 17:11:16.304 INFO [datasul-exec-404] com.totvs.framework.rest.connector.APIDatasulConnector.callProgressProgram Executado o programa progress : hpr/api/v1/modalities
14-Apr-2023 17:11:16.366 INFO [datasul-exec-404] com.totvs.framework.rest.connector.APIDatasulConnector.callProgressProgram Retorno do JSON do programa Progress: hpr/api/v1/modalities
14-Apr-2023 17:11:16.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]
2023-04-14T17:11:16.304-0300 020972 050324 2 AS-27 ?:?:? FILEID         Open \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\utp\ut-logexecapi.r ID=595
2023-04-14T17:11:16.304-0300 020972 050324 2 AS-27 ?:?:? FILEID         Close \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\utp\ut-logexecapi.r ID=595
2023-04-14T17:11:16.304-0300 020972 050324 3 AS-27 ?:?:? 4GLTRACE       Return from Main Block [utp/ut-logexecapi.p]
2023-04-14T17:11:16.304-0300 020972 050324 3 AS-27 ?:?:? 4GLTRACE       Return from registerLogExec [fwk/rest/authProgressApp.p]
2023-04-14T17:11:16.304-0300 020972 050324 3 AS-27 ?:?:? AS -- TRACE: Internal Procedure (Proxy 2) END SUCCESS.
2023-04-14T17:11:16.304-0300 020972 050324 4 AS-27 ?:?:? AS -- TRACE: cso4GL: In execProc() - successful execution. (8458)
2023-04-14T17:11:16.304-0300 020972 050324 4 AS-27 ?:?:? AS -- TRACE: cso4GL: In execCall() - execProc() success. (8458)
2023-04-14T17:11:16.304-0300 020972 032564 3 AS-27 ?:?:? AS -- TRACE: PERSISTENT Procedure 'hpr/api/v1/modalities' START (Proxy 3).
2023-04-14T17:11:16.304-0300 020972 032564 2 AS-27 ?:?:? FILEID         Open \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\GESTAO-PLANOS\hpr\api\v1\modalities.r ID=595
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? FILEID         Close \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\GESTAO-PLANOS\hpr\api\v1\modalities.r ID=595
2023-04-14T17:11:16.319-0300 020972 032564 4 AS-27 ?:?:? AS -- TRACE: cso4GL: In execProc() - before execution. (8458)
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? 4GLTRACE       Run mycast [Main Block - hpr/api/v1/modalities @ 69]
2023-04-14T17:11:16.319-0300 020972 032564 3 AS-27 ?:?:? 4GLTRACE       Return from myCast [hpr/api/v1/modalities]
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? 4GLTRACE       Run fwk/auth/endpointSecurityServices.p PERSIST [Main Block - hpr/api/v1/modalities @ 76]
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? FILEID         Open \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\fwk\auth\endpointSecurityServices.r ID=595
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? FILEID         Close \\cxs-gcad-rep01\progress_repository\11-5-X-PROGRESS_12\FOUNDATION\fwk\auth\endpointSecurityServices.r ID=595
2023-04-14T17:11:16.319-0300 020972 032564 3 AS-27 ?:?:? 4GLTRACE       Return from Main Block [fwk/auth/endpointSecurityServices.p]
2023-04-14T17:11:16.319-0300 020972 032564 2 AS-27 ?:?:? 4GLTRACE       Run verifyEndpointAccess2 in fwk/auth/endpointSecurityServices.p "/dts/datasul-rest/resources/prg/hpr/v1/modalities/" [Main Block - hpr/api/v1/modalities @ 78]
2023-04-14T17:11:16.319-0300 020972 032564 3 AS-27 ?:?:? 4GLTRACE       Return from verifyEndpointAccess2 "yes" [fwk/auth/endpointSecurityServices.p]


405Reduzir 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


406Processos 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.
407Configuração inicial do PASOEDocumentação com maiores informações sobre a configuração inicial do PASOE8. Configurando o Progress Application Server OpenEdge (PASOE)


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/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.

IDO quePor queComo
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:

  • 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 para 60000 (1 minuto).

  • Connection wait timeout (milisegundos): indica o tempo que a requisição vai "tolerar" a espera por uma sessão em um agente já existente. Se este tempo for excedido, vai solicitar a adição automática de mais um Agente, desde que Maximum number of agents ainda não tenha sido atingido. Seu valor default é 3000 (3 segundos), e é recomendável não alterar.

É 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.

Image Modified

503

Relação entre Sessões e Conexões

Este é um novo controle criado no PASOE, e pode gerar dúvidas.

  • Maximum ABL sessions per agent: corresponde ao número de Licenças Progress que você utilizava no seu AppServer clássico. Este número funciona como um pool.

  • Maximum connections per agent: número máximo de conexões simultâneas/threads. Deve ser igual ou inferior ao parâmetro acima. Se o consumo de memória e processamento do seu servidor estiver muito alto, este parâmetro pode ser usado para reduzir a carga.
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:

  • PASOE do Menu Datasul: parte-se do princípio que este PASOE responde a requisições dos usuários na tela (consultas, alterações, etc), onde o comportamento normal é resposta quase instantânea. Neste escopo, a tolerância é baixa. Considerando que o processo mais pesado possa demorar 5 minutos, pode-se configurar o parâmetro para 10 minutos (600 segundos) como margem de segurança. Assim, caso uma requisição apresente travamento, o processo abortar-a e a Sessão ficará novamente disponível após 10 minutos.

  • PASOE do RPW: este PASOE deve estar preparado para executar processos pesados em segundo plano, mas ainda assim pode fazer sentido controlar travamentos. Considerando que o processo mais pesado possa demorar 8 horas, pode-se configurar para 12 horas (720 minutos), ou de forma mais conservadora, 24 horas (1440 minutos). Assim, da mesma forma, os processos irão abortar após este timeout.


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:

Informações

2024-05-29T18:57:21.230-0300 013552 009032 3 AS-4 ?:?:? 4GLTRACE       Return from doGetDocumentsByFilter [bosau/hrc/bosaudocuments.p] ERROR
2024-05-29T18:57:21.230-0300 013552 009032 3 AS-4 ?:?:? 4GLTRACE       Return from doCentralTISSQuery [bosau/hrc/bosaudocuments.p] STOP
2024-05-29T18:57:21.230-0300 013552 009032 3 AS-4 ?:?:? 4GLTRACE       Return from getDocumentsByFilter [bosau/hrc/bosaudocuments.p] STOP
2024-05-29T18:57:21.230-0300 013552 009032 3 AS-4 ?:?:? 4GLTRACE       Return from REST_POST_getDocumentsByFilter [fch/fchsau/hrc/fchsaudocuments] STOP
2024-05-29T18:57:21.230-0300 013552 009032 3 AS-4 ?:?:? AS -- TRACE: Internal Procedure (Proxy 4) END STOP.
2024-05-29T18:57:21.230-0300 013552 009032 4 AS-4 ?:?:? AS -- TRACE: cso4GL: In execProc() -  execution failed. (8458)
2024-05-29T18:57:21.230-0300 013552 009032 4 AS-4 ?:?:? AS -- TRACE: cso4GL: In execCall() -  execProc() failed. (8458)

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:

Image Modified

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'
2024-06-17T07:26:53.768-0300 024104 024140 4 AS-ResourceMgr mtapsv:-:? CONN           Setting attention flag for database 'srmovfin', interval '30'
2024-06-17T07:26:53.768-0300 024104 024140 4 AS-ResourceMgr mtapsv:-:? CONN           Setting attention flag for database 'especificos', interval '30'
2024-06-17T07:26:53.768-0300 024104 024148 4 AS-4 ?:?:? CONN           Checking notification for database emscad
2024-06-17T07:26:53.768-0300 024104 024148 4 AS-4 ?:?:? CONN           Checking notification for database emsesp
2024-06-17T07:26:53.768-0300 024104 024148 4 AS-4 ?:?:? CONN           Checking notification for database emsfnd

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.

  • Idle agent timeout (default 300000 milisegundos → 5 minutos): se um agente multi-thread ficar este tempo sem nenhuma atividade em nenhuma das suas sessões, será derrubado automaticamente para reduzir o consumo desnecessário de recursos e hardware e licenças.

  • Idle connection timeout (default 300000 milisegundos → 5 minutos): quando uma conexão do PASOE com o banco de dados ficar este tempo sem nenhuma atividade, será desconectada automaticamente, liberando recursos, especialmente memória. Seu agente continua ativo. Quando entrarem novas requisições e não houverem conexões disponíveis, novas conexões serão ativadas automaticamente para o mesmo agente, desde que Maximum connections per agent ainda não tenha sido atingido. E se não houverem mais conexões disponíveis, será adicionado um novo agente, conforme explicado no item 502.

  • Idle resource timeout (default 0 → desligado!): este parâmetro fica desligado por default, e afeta os demais acima. Para que as sessões e agentes sejam derrubados automaticamente por tempo de inatividade (conforme descrito nos outros parâmetros deste item), este precisa estar preenchido. Recomendamos o valor 300000 → 5 minutos.

  • Idle session timeout (default 1800000 → 30 minutos): quando uma sessão ficar este tempo sem nenhuma atividade, será derrubada automaticamente, junto com a sua conexão, liberando recursos até que nova demanda seja gerada, conforme item 502.

  • Agent listener timeout (default 300000 → 5 minutos): tempo em que o gerenciador "tolera" aguardar pelo start completo de um Agente antes de abortar. Se o tempo for muito baixo, corre-se o risco de falhas por mero delay do hardware, concorrência de recursos, etc. Recomenda-se manter o default ou mais alto.

Image Modified

Artigo da Progress: https://community.progress.com/s/article/How-to-configure-PASOE-to-clean-up-idle-resources-automatically