Aplicação Java Web / Glassfish parando

Estou tendo um problema e infelizmente não estou conseguindo encontrar a causa.

Tenho 3 aplicações Java Web rodando em um servidor Glassfish e o que acontece é que essas aplicações, do nada, param de funcionar. O Glassfish continua rodando, porém as aplicações travam.

E o pior é que não fica nenhum registro nos logs. Simplesmente o log congela onde a aplicação parou. Assim, infelizmente não tenho a mínima noção do que possa estar ocasionando este problema.

A aplicação é Java Web (jsp), com Hibernate, banco de dados MySQL, pool de conexão com C3P0, Glassfish 4.1.1.

Por favor, se precisarem de mais alguma informação, me informem que posto aqui, pois como falei, não tenho a mínima ideia da causa e quais informações à mais postar.

Muito obrigado

Por que o pool é do c3p0 e não do próprio glassfish? Embora isso não devesse ocasionar o travamento, seria uma prática um tanto melhor.
Além disso, chegou a verificar se não é timeout ou excesso de conexões ativas no MySQL?

Mas a aplicação morre? Você começa a receber erro 404 ou morre um processo e você tem que reiniciá-lo? Como você sabe que o Glassfish não parou, entrando no endereço padrão dele?

Referente ao C3P0, devo-lhe dizer que utilizei esta opção por falta de um conhecimento mais aprofundado sobre a questão. Quando foi implementado o C3P0, pesquisei muito o a maioria das recomendações era para por o gerenciamento do Pool de conexão diretamente na aplicação.

Quanto ao timeout e conexões ativas no MySQL, a situação atual é:

  • Para as conexões ativas, esta setado até 302 conexões, porém normalmente, utiliza no máximo 50 conexões.
  • Quanto ao timeout, vou verificar.

Desde já, muito obrigado pela sua atenção.

Sim, simplesmente a aplicação “morre”. Não roda mais.
Quanto ao Glassfish, este não para pois eu consigo acessá-lo normalmente pelo endereço padrão no navegador. Tenho todos os acessos normais dentro do Glassfish e para a aplicação voltar a funcionar, preciso reiniciar o Glassfish, tanto pelo navegador quando pelo prompt.

Eu nunca vi ele sendo aplicado comercialmente. Porém, é a minha experiência, pode ser que o pessoal aqui já tenha visto isso.

Parece algo com consumo de memória.

Mas o que é o “não roda mais”? Erro 404? Uma página em branco quando você acessa o endereço?

OBS: O ruim de ser Glassfish é que é um server pouco conhecido no mercado, não sei nem onde pedir pra você averiguar o problema, ou como são as diretivas de configuração dele…

Faço o monitoramento das aplicações através do VisualVM, até porque esta questão da memória era algo que eu imaginava ser o problema.
Porém, pelo que analisei, não parece ser.
Os parâmetros que tenho no Glassfish para ajustes de uso de memória são:
-XX:MaxPermSize=1024m

Porém a memória mostrada no VisualVM não passa de 1000m.

Por favor, terias alguma sugestão de servidor Java que poderia ser mais indicado?

Pesquisei tentando encontrar outra opção, na busca realmente de um servidor mais confiável, porém não encontrei nada.

Se estiver usando o Java 8, a PermSize não existe mais e logo esse seu parâmetro não é usado mais pra nada.

Se você puder aumentar e testar coloque -Xms2048M -Xmx4096M só pra avaliarmos se memória é um problema.

O problema é que utilizo uma máquina dedicada AWS, porém com 4GB de memória.

Você pode usar o Wildfly da JBoss, bem mais usado que o Glassfish e com bastante material na comunidade, porém precisaria conhecer mais sua aplicação para saber se ela não está com alguma config já amarrada ao Glass…

Todavia, aqui vai mais uma pergunta, você está usando EJB? Pela descrição da sua mensagem não, logo de repente usar um container mais leve pode ser uma boa. Por exemplo, temos opções bem mais leves e com bastante material na net que são:

  • Tomcat - http://tomcat.apache.org/
    Esse é BEM conhecido e tem material a rodo na net por ele. Dá pra voar com esse bichinho já.

  • Undertown - http://undertow.io/
    Esse tá ganhando muito espaço no mercado, e tem a RedHat nos bastidores, então deve ser bom.

  • Jetty - https://www.eclipse.org/jetty/
    Se não me engano, esse fórum está dispopnibilizado nesse servidor, nunca usei, mas sempre ouvir falar muito bem.

  • Netty - https://netty.io/
    Pelo que ando lendo, esse tem sido o queridinho da comunidade atualmente por conta de sua velocidade.

Todavia, mesmo com tudo isso ainda lhe indico o Tomcat caso você não esteja precisando de EJBs na sua aplicação (se bem que parece que tem o tal do TomEE) pois é o que tem mais material disponível atualemente e pode possibilitar você andar mais tempo de forma autônoma.

Entendi. Realmente nesse caso é um problema… Mas seu sistema está nessa máquina já em produção? Você não tem um ambiente isolado apenas para testes/desenv na sua máquina local?

Consigo rodar em um ambiente teste, mas neste ambiente é mais difícil eu ter a quantidade de acessos que tem a aplicação em ambiente de produção. Não sei se conseguiria reproduzir nas mesmas condições de uso.

Vou estudar a opção de utilizar o Tomcat.

Muito obrigado

Pessoal, o problema acabou de acontecer novamente.
No VisualVM, o consumo da memória congelou em:

  • Size: 877.133.824B
  • Max: 954.728.448B
  • Used: 398.614.632B

No Log do Glassfish, o registro congelou em:
[2019-04-25T14:18:27.244+0000] [glassfish 4.1] [INFO] [] [com.sun.metro.policy] [tid: _ThreadID=33 _ThreadName=http-listener-1(4)] [timeMillis: 1556201907244] [levelValue: 800] [[
WSP5018: Loaded WSIT configuration from file: file:/root/glassfish4/glassfish/domains/domain1/applications/PortalWS/WEB-INF/classes/META-INF/wsit-client.xml.]]

Tive que reiniciar o Glassfish pelo navegador.

Talvez seja a hora de você criar uma rotina de testes de stress na sua aplicação? Quantos usuários simultâneos você tem em média? Sabe me responder?

De repente criar aí um teste usando o JMeter https://jmeter.apache.org/

Cara, se você ainda tiver com esse problema a noite e quiser chamar num Hangout pra gente tentar explorar melhor uma solução mais direta, fique a vontade de me chamar. Não vou ter muito tempo pra averiguar, mas vendo o projeto, pode ficar mais fácil de lhe ajudar. Qualquer coisa me chama no privado e eu te passo meu contato pra gente trocar uma ideia a noite. :+1:

Cara, veja o que eu encontrei em uma pesquisa rápida no Google

Veja se te dá um norte :+1:

Verifiquei o caminho informado neste post do Stackoverflow e não há registro de “Out of memory” , nem nos logs “syslog” e “syslog.1”.
Vou avaliar a questão do swap.

Esses são os registros da última hora:

Apr 25 13:39:46 ip-172-31-86-120 systemd[1]: Started Session 301 of user ubuntu.

Apr 25 13:56:40 ip-172-31-86-120 systemd-timesyncd[492]: Network configuration changed, trying to establish connection.

Apr 25 13:56:40 ip-172-31-86-120 systemd-timesyncd[492]: Synchronized to time server 91.189.91.157:123 (ntp.ubuntu.com).

Apr 25 14:10:57 ip-172-31-86-120 systemd[1]: Started Session 302 of user ubuntu.

Apr 25 14:14:31 ip-172-31-86-120 systemd[1]: Started Session 303 of user ubuntu.

Apr 25 14:17:01 ip-172-31-86-120 CRON[7025]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

Apr 25 14:19:54 ip-172-31-86-120 systemd[1]: Started Session 305 of user ubuntu.

Apr 25 14:26:40 ip-172-31-86-120 systemd-timesyncd[492]: Network configuration changed, trying to establish connection.

Apr 25 14:26:40 ip-172-31-86-120 systemd-timesyncd[492]: Synchronized to time server 91.189.91.157:123 (ntp.ubuntu.com).

Apr 25 14:30:24 ip-172-31-86-120 systemd[1]: Started Session 306 of user ubuntu.