Membros Pro Messias Bittencourt Posted September 4 Membros Pro Share Posted September 4 Bom dia. Gostaria de solicitar uma análise no erro citado abaixo. Instalei no mesmo server linux (VERSION="22.04.4 LTS (Jammy Jellyfish)") e no mesmo tomcat (apache-tomcat-10.1.24) os três wars (java 11) consumindo os .so de boleto, pix e cep. Quando utilizo as versões dos wars que consomem os arquivos .so comuns (sem ser Multi Thread) tudo funciona normalmente. Mas quando coloco os 3 wars, ou pelo menos um deles, como sendo Multi Thread acontece a situação abaixo (exemplos): * Executo a chamada de um serviço do BOLETO MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio BOLETO também funciona. Mas se eu executar qualquer serviço do PIX ou do CEP é gerado um Fatal error na dll do BOLETO. * Executo a chamada de um serviço do PIX MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio PIX também funciona. Mas se eu executar qualquer serviço do BOLETO ou do CEP é gerado um Fatal error na dll do PIX. * Executo a chamada de um serviço do CEP MT, por exemplo, o consultar por cep. Este funciona normalmente e retorna com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio CEP também funciona. Mas se eu executar qualquer serviço do BOLETO ou do PIX é gerado um Fatal error na dll do CEP. RESUMO: O primeiro .so MT instanciado funciona normalmente. Quando executo de um segundo .so MT (ou não) ele gera Fatal error no .so do primeiro que funcionou corretamente. Isto acontece apenas quando utilizo mais de um war e que pelo menos um esteja consumindo a versão MT. Não sei se está ocorrendo um conflito entre a primeira e segunda instância... Observação 01: Se eu colocar todos sem consumir o MT todos funcionam normalmente; Observação 02: Quando utilizo mais de 1 war e pelo menos 1 MT, obrigatoriamente tive de copiar os .so para a pasta default de libs do Linux. Se eu usar o comum (sem ser MT), é respeitado o endereço do .so que se encontra no .ini; Observação 03: Ao ser gerado o primeiro Fatal error nenhum mais é possível instanciar; Observação 04: Nada é gerado no log da biblioteca. Apenas no log do tomcat. Seguem os erros separados e que ocorrem de forma alternada. Fatal_libacbrboleto64.logFatal_libacbrpixcd64.logFatal_liblibacbrcep64.log Poderiam me auxiliar nesta? Att Link to comment Share on other sites More sharing options...
Consultores Júlio Cavalcanti Posted September 4 Consultores Share Posted September 4 Tópico movido para a área do SAC, para que o SLA de respostas seja considerado Link to comment Share on other sites More sharing options...
Consultores Júlio Cavalcanti Posted September 4 Consultores Share Posted September 4 47 minutos atrás, Messias Bittencourt disse: Bom dia. Gostaria de solicitar uma análise no erro citado abaixo. Instalei no mesmo server linux (VERSION="22.04.4 LTS (Jammy Jellyfish)") e no mesmo tomcat (apache-tomcat-10.1.24) os três wars (java 11) consumindo os .so de boleto, pix e cep. Quando utilizo as versões dos wars que consomem os arquivos .so comuns (sem ser Multi Thread) tudo funciona normalmente. Mas quando coloco os 3 wars, ou pelo menos um deles, como sendo Multi Thread acontece a situação abaixo (exemplos): * Executo a chamada de um serviço do BOLETO MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio BOLETO também funciona. Mas se eu executar qualquer serviço do PIX ou do CEP é gerado um Fatal error na dll do BOLETO. * Executo a chamada de um serviço do PIX MT, por exemplo, o gerar cobrança. Este funciona normalmente e gera com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio PIX também funciona. Mas se eu executar qualquer serviço do BOLETO ou do CEP é gerado um Fatal error na dll do PIX. * Executo a chamada de um serviço do CEP MT, por exemplo, o consultar por cep. Este funciona normalmente e retorna com sucesso. Qualquer chamada na sequencia que eu execute, se for do próprio CEP também funciona. Mas se eu executar qualquer serviço do BOLETO ou do PIX é gerado um Fatal error na dll do CEP. RESUMO: O primeiro .so MT instanciado funciona normalmente. Quando executo de um segundo .so MT (ou não) ele gera Fatal error no .so do primeiro que funcionou corretamente. Isto acontece apenas quando utilizo mais de um war e que pelo menos um esteja consumindo a versão MT. Não sei se está ocorrendo um conflito entre a primeira e segunda instância... Observação 01: Se eu colocar todos sem consumir o MT todos funcionam normalmente; Observação 02: Quando utilizo mais de 1 war e pelo menos 1 MT, obrigatoriamente tive de copiar os .so para a pasta default de libs do Linux. Se eu usar o comum (sem ser MT), é respeitado o endereço do .so que se encontra no .ini; Observação 03: Ao ser gerado o primeiro Fatal error nenhum mais é possível instanciar; Observação 04: Nada é gerado no log da biblioteca. Apenas no log do tomcat. Seguem os erros separados e que ocorrem de forma alternada. Fatal_libacbrboleto64.log 974 B · 1 download Fatal_libacbrpixcd64.log 973 B · 0 downloads Fatal_liblibacbrcep64.log 974 B · 0 downloads Poderiam me auxiliar nesta? Att Verifique se no ACBrLib.ini (https://acbr.sourceforge.io/ACBrLib/Geral.html) LogNivel = 4 (Paranoico) LogPath = (path válido) O erro me parece ser falha de segmentação. Uma possível solução é usar um depurador para identificar a linha que está causando a falha. Verifique: Ajuste a Configuração de Memória do Tomcat. Como você está rodando três aplicações no mesmo Tomcat, verifique se a configuração de memória (heap size, permgen/metaspace) está adequada para suportar todas as aplicações. Certifique-se de que o código não tenta ler ou escrever em locais de memória que não estão alocados ou estão fora dos limites. O seu programa é multi-threaded, verifique se há condições de corrida ou falta de sincronização adequada, que podem levar a falhas de segmentação. Verifique as permissões de leitura e escrita para as pastas. Certifique-se de que os ponteiros estão devidamente inicializados e que não são desreferenciados quando estão nulos (NULL). Ajustes no CATALINA_OPTS ou JAVA_OPTS podem ser necessários. Valores de exemplo: export CATALINA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m" O que você pode fazer é testar o programa Exemplo MT em Java que está disponível no SVN, apenas para referência. 1 Link to comment Share on other sites More sharing options...
Membros Pro Messias Bittencourt Posted September 4 Author Membros Pro Share Posted September 4 2 horas atrás, Júlio Cavalcanti disse: Verifique se no ACBrLib.ini (https://acbr.sourceforge.io/ACBrLib/Geral.html) LogNivel = 4 (Paranoico) LogPath = (path válido) O erro me parece ser falha de segmentação. Uma possível solução é usar um depurador para identificar a linha que está causando a falha. Verifique: Ajuste a Configuração de Memória do Tomcat. Como você está rodando três aplicações no mesmo Tomcat, verifique se a configuração de memória (heap size, permgen/metaspace) está adequada para suportar todas as aplicações. Certifique-se de que o código não tenta ler ou escrever em locais de memória que não estão alocados ou estão fora dos limites. O seu programa é multi-threaded, verifique se há condições de corrida ou falta de sincronização adequada, que podem levar a falhas de segmentação. Verifique as permissões de leitura e escrita para as pastas. Certifique-se de que os ponteiros estão devidamente inicializados e que não são desreferenciados quando estão nulos (NULL). Ajustes no CATALINA_OPTS ou JAVA_OPTS podem ser necessários. Valores de exemplo: export CATALINA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m" O que você pode fazer é testar o programa Exemplo MT em Java que está disponível no SVN, apenas para referência. Bom dia Júlio. Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método: Agora, Messias Bittencourt disse: Bom dia Júlio. Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método: Este inicializar eu chamo ele a cada serviço executado: No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto? 2 minutos atrás, Messias Bittencourt disse: Bom dia Júlio. Obrigado pelas informações e irei testar com estas alterações no tomcat. Em relação ao inicializar observe como está meu método: Este inicializar eu chamo ele a cada serviço executado: No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto? ou seja, eu inicializo a biblioteca passando um ponteiro a cada serviço chamado certo? Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 4 Consultores Share Posted September 4 1 hour ago, Messias Bittencourt said: No inicio do método que gera um boleto eu chamo este inicializar. Assim como o chamo também no início do método de consultar boleto. Está correto? Boa tarde. A lógica é: Inicializa a biblioteca > Executa o que precisa fazer > Finaliza a biblioteca. Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação. Se preferir esta abordagem em que você precisa finalizar ela também. Mas você não precisa fazer a cada chamada, por exemplo: Boleto_Inicializar Boleto_ConfigurarDados Boleto_Inicializar Boleto_Imprimir Você pode fazer: Boleto_Inicializar Boleto_ConfigurarDados Boleto_Imprimir Boleto_Finalizar Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Membros Pro Messias Bittencourt Posted September 4 Author Membros Pro Share Posted September 4 1 hora atrás, Diego Foliene disse: Boa tarde. A lógica é: Inicializa a biblioteca > Executa o que precisa fazer > Finaliza a biblioteca. Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação. Se preferir esta abordagem em que você precisa finalizar ela também. Mas você não precisa fazer a cada chamada, por exemplo: Boleto_Inicializar Boleto_ConfigurarDados Boleto_Inicializar Boleto_Imprimir Você pode fazer: Boleto_Inicializar Boleto_ConfigurarDados Boleto_Imprimir Boleto_Finalizar Boa tarde e obrigado! Quando vc diz que "Você pode inicializar ela só uma vez quando inicia sua aplicação e finalizar ela quando encerra a aplicação." quer dizer da aplicação mesmo? Por exemplo: ao subir o .war no tomcat eu inicializo apenas no start e depois basta usar? Pq meu tomcat ficará meses sem restart por exemplo. Então neste tempo todas as consultas, gerações de boleto, cancelamentos utilizaram aqele obj inicializado no start do server? Ou vc quis dizer chamadas à minha aplicação? Link to comment Share on other sites More sharing options...
Consultores Solution Diego Foliene Posted September 5 Consultores Solution Share Posted September 5 Boa tarde. On 9/4/2024 at 2:03 PM, Messias Bittencourt said: quer dizer da aplicação mesmo? Sim, no exemplos que temos disponíveis em nosso SVN, por exemplo, é assim. On 9/4/2024 at 2:03 PM, Messias Bittencourt said: ao subir o .war no tomcat eu inicializo apenas no start e depois basta usar? Pq meu tomcat ficará meses sem restart por exemplo. Então neste tempo todas as consultas, gerações de boleto, cancelamentos utilizaram aqele obj inicializado no start do server? Se não ocorrer nenhum problema sim, ele vai usar essa mesma instância. Se você preferir, você também pode criar uma instância a cada ação, mas precisa lembrar de finalizar ela. Vamos supor que eu quero seguir a abordagem em que crio um instância para cada ação e eu vou adicionar em minha aplicação um botão que vai carregar as informações de um boleto que ao clicar vai carregar um ini na lib e imprimir. O código do botão vai ser os métodos em ordem: BOLETO_Inicializar; BOLETO_IncluirTitulos; BOLETO_Imprimir; BOLETO_Finalizar; Veja que eu inicializei a biblioteca, fiz o que queria e finalizei ela. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Recommended Posts