GUJ agora no Jetty

Muitos devem ter percebido a recente instabilidade do GUJ. Estamos suspeitando de possíveis vazamentos de memória no guj e no jforum atual, mas nada confirmado. Além de tudo isso, o Tomcat não tem colaborado conosco. Esporadicamente ele congela, para de responder e o processo continua de pé. Os logs também não tem ajudado em nada.

Dada a ótima experiência que já tivemos com o Jetty, estamos dando uma chance a ele. Acabamos de colocar o GUJ para rodar no Jetty ao invés do Tomcat e contamos com a colaboração e compreensão de todos para possíveis problemas que possam ocorrer nos próximos dias.

A migração foi bem simples, quase nenhuma mudança, a não ser pelo uso do método servletContext.getResourceAsStream(), sem colocar a ‘/’ no começo da String.

Não devemos sentir nenhuma diferença no GUJ por causa desta mudança. Tivemos a sensação de que ficou um pouco mais rápido, mas isso não é nada formal; apenas impressão. Uma diferença importante que já pudemos perceber é que o jetty tem consumido muito menos memória do que o Tomcat. Portanto, se o problema real for mesmo algum vazamento de memória, vamos demorar mais a ver o GUJ cair.

Já agradeço novamente a compreensão de todos. Esse post é apenas uma tentativa de compartilhar um pouco do que está sendo feito para melhorar o GUJ com todos vocês, e de saber que é sim possível migrar de forma (quase) transparente entre servlet containers.

Legal Fábio!

Qual é a quantidade de memória que o Tomcat utilizava e que o Jetty utiliza?

cedo para dizer!

Deixa um pouco mais de tempo e eu te digo. :wink:

:arrow: :arrow: :smiley:

Legal! Tomara que a experiência traga melhoras.

Também digo que senti uma melhora de velocidade, acredito que não seja só impressão não…

Pois existe um estudo que diz que melhora de performance visual só é sentida se for mais que 20%, então acredito que deva ter melhorado muito ! :slight_smile:

Opa legal fabião, GUJ sempre melhorando =)

Não seria esse o princípio da migração para o Ruby(conforme você disse no Falando em Java, que usavam o Jetty)? heheheheh

Legal, e depois que li isso também acho que está mais rápido… hauhauhuauha 8)

Muito legal escolherem o Jetty para substituir o Tomcat.

Acredito muito no potencial do Jetty mas nunca o utilizei em um ambiente do porte do GUJ.

Abraços.

Fabio, que tal se ao término de todo o processo de migração pro o guj 3, fosse feito um artigo mostrando as dificuldades, pontos fortes da nova estrutura, como ficou o funcionamento de tudo e tal, aquele resumão da arquitetura do guj?
acho que seria bacana :slight_smile:

Boa Luiz!

Esse é o objetivo. Com certeza sai algo no blog da Caelum e/ou na MundoJava. Veremos… :wink:

Fabio, qual versão do jetty?

nada contra o Jetty, mas e o Glassfish? alguém já teve más experiências? tenho apostado no GlassFish até um dia levar na cabeça :stuck_out_tongue:

GlassFish vs Jetty… alguém sabe dizer qual seria a melhor escolha? Até para projetos simples mesmo…

Pra que um AS como o Glassfish se não há EJB, JMS, WebService, etc?

O Glasfish usa o Jetty, assim como o Jboss usa o tomcat.
Então, se o Jetty é rápido, boas chances do Glassfish ser tb.

Estamos torcendo ! :slight_smile:

Pra que um AS como o Glassfish se não há EJB, JMS, WebService, etc?[/quote]

por exemplo não usa agora mas pode vir a usar, por isso se já tiver um servidor completo bombando fica mais fácil sei lá… é como ter um ferrari quando se precisa de um fusquinha :stuck_out_tongue:

GlassFish V2 tem se mostrado muito rapido comigo…

Costumo usar ele mesmo sem ter EJB nos projetos… pois a administracao dele é facilitada e carga é modular… se vc nao usar JMS por exemplo… ele nao carrega o MessageQUEUE… e assim por diante…

A integração dele é tão facil quanto Tomcat nas IDE’s e se vc usar o feijão com arroz ele tmb é de carga bem rapida :slight_smile:

A mais nova: jetty-6.1.11. Pensei em usar o jetty7 beta, mas é arriscado d+.

[quote=reinaldob]O Glasfish usa o Jetty, assim como o Jboss usa o tomcat.
Então, se o Jetty é rápido, boas chances do Glassfish ser tb. [/quote]
Glassfish não usa o Jetty. Usa o Grizzly. Os nomes são parecidos mesmo! :smiley:

Gente, agora a coisa toda deve estabilizar. Resolvemos o último problema que tinhamos, que era o consumo alto de cpu, por causa dos NIO connectors. O GUJ agora tem um proxy reverso na frente do(s) jetty(ies) que serve todo o conteúdo estático e possivelmente faz balanceamento de carga.

O servidor agora dificilmente passa de 10% de uso total do cpu e o jetty tem usado em média apenas 5% da memória do servidor (2Gb).

Para fazer o papel de proxy reverso, estamos usando o fantástico Nginx. É realmente impressionante. Recomendo que dêem uma olhada. É muito rápido e consome poquíssimos recursos do servidor. Senti que o GUJ está bem mais rápido agora com o nginx servindo o conteúdo estático.

Também fizemos uma tentativa de deixar vários jetties em balanceamento de carga de ontem para hoje. Funcionou bem, a não ser pelo fato de que o jforum do jeito que está configurado hoje não consegue compartilhar os caches que faz entre os vários nós (jetty) de um cluster. Com um pouquinho mais de código e configuração daria para balancear carga sem problema, mas com o número de requests/s e o uso dos recursos no servidor atuais, não estamos precisando mesmo de balanceamento de carga para o GUJ.

Agradeço denovo a compreensão de todos!

Muito bom Fabio, parabéns!

Fabio , será que o GlassFish não dá conta do recado ?