<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.caelum.com.br &#187; servlet container</title>
	<atom:link href="http://blog.caelum.com.br/tag/servlet-container/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nova apostila FJ-21 liberada, InfoQ e Comunidade</title>
		<link>http://blog.caelum.com.br/nova-apostila-fj-21-liberada-infoq-e-comunidade/</link>
		<comments>http://blog.caelum.com.br/nova-apostila-fj-21-liberada-infoq-e-comunidade/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 15:00:12 +0000</pubDate>
		<dc:creator>Lucas Souza</dc:creator>
				<category><![CDATA[Caelum]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[apostilas]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[fj-21]]></category>
		<category><![CDATA[guj]]></category>
		<category><![CDATA[infoq]]></category>
		<category><![CDATA[servlet container]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=1894</guid>
		<description><![CDATA[Esse mês o trabalho da Caelum em conjunto com a comunidade foi bastante intenso. O GUJ e o PortalJava se uniram, e, juntamente com a Giran, fizemos a migração da base de usuários e de posts, totalizando quase um milhão de mensagens nos fóruns. A Caelum nasceu destas comunidades e ficamos muito contentes em poder <a href="http://blog.caelum.com.br/nova-apostila-fj-21-liberada-infoq-e-comunidade/#more-1894'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://farm5.static.flickr.com/4014/4344834453_9e5ccb3fab_t.jpg" width="240" />
		</p><p>Esse mês o trabalho da  Caelum em conjunto com a comunidade foi bastante intenso. </p>
<p><img src="http://farm5.static.flickr.com/4014/4344834453_9e5ccb3fab_t.jpg" align="left" style="margin-right:20px"/>O <a href="http://www.guj.com.br/java/149155-portal-java-e-guj-se-unem">GUJ e o PortalJava</a> se uniram, e, juntamente com a <a href="http://www.giran.com.br/">Giran</a>, fizemos a migração da base de usuários e de posts, totalizando quase <strong>um milhão de mensagens</strong> nos fóruns. A Caelum nasceu destas comunidades e ficamos muito contentes em poder ajudar na continuidade delas.</p>
<p><img src="http://farm5.static.flickr.com/4071/4345574754_44af6bfd97_t.jpg" align="right" style="margin-left: 20px"/>Outra novidade é que este ano a Caelum ajudará o <a href="http://www.infoq.com/br">InfoQ Brasil</a>, sendo a mantenedora do conteúdo. Estamos preparando muitas novidades, eventos e, em breve, anunciaremos uma forma bem simples de todos poderem participar, trazendo a experiência que tivemos com o GUJ e PortalJava nesses mais de 8 anos.</p>
<p><img src="http://www.caelum.com.br/imagens/cursos/fj21-icon.gif" align="left" />A <strong>nova</strong> apostila do FJ-21, <a href="http://www.caelum.com.br/curso/fj-21-java-web/">curso de Java para desenvolvimento Web</a>, que é usada  desde o começo do ano nos cursos, está agora liberada para <a href="http://www.caelum.com.br/apostilas" title="Download das apostilas">download no Site</a>. Em relação à versão anterior, a apostila traz muitas novidades, como atualização para Struts 2 e VRaptor 3, um novo capítulo sobre <a href="http://blog.caelum.com.br/2010/01/08/java-ee6-comecando-com-as-servlets-3-0/">servlets 3.0</a>, e outros conteúdos como Ajax, Interceptadores, Tagfiles e Inversão de Controle. A apostila foi toda reescrita e revisada e conta com novos textos e exercícios. O novo PDF já está disponível para download aberto e, em breve, convidaremos os ex-alunos da versão 2009 do curso para conhecerem as novidades.</p>
<p>Com essas e outras iniciativas nos fóruns, portais, eventos, opensource e apostilas, a Caelum espera retribuir o constante apoio da comunidade. E toda ajuda e opinão são sempre muito bem-vindas. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/nova-apostila-fj-21-liberada-infoq-e-comunidade/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Melhorando o GUJ: Jetty, NIO e load balancing</title>
		<link>http://blog.caelum.com.br/melhorando-o-guj-jetty-nio-e-load-balancing/</link>
		<comments>http://blog.caelum.com.br/melhorando-o-guj-jetty-nio-e-load-balancing/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 10:41:36 +0000</pubDate>
		<dc:creator>Fabio Kung</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Caelum]]></category>
		<category><![CDATA[escalabilidade]]></category>
		<category><![CDATA[guj.com.br]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[nio]]></category>
		<category><![CDATA[reverse proxy]]></category>
		<category><![CDATA[servlet container]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2008/06/27/melhorando-o-guj-jetty-nio-e-load-balancing/</guid>
		<description><![CDATA[Durante boa parte da vida do GUJ.com.br, na sua segunda versão (screenshot acima), o site sofreu diversas quedas e passou por muitos períodos de lentidão, mesmo depois de ter migrado para um servidor dedicado. A grande verdade é que por um bom tempo ficamos devendo a devida atenção ao deployment do GUJ. Sempre que um <a href="http://blog.caelum.com.br/melhorando-o-guj-jetty-nio-e-load-balancing/#more-225'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><center><a href='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj2.png' title='GUJ2'><img style="display:inline" src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj2.png' alt='GUJ2' width="500" height="132" border="none" /></a></center>
<p/>
<p>Durante boa parte da vida do <a href="http://www.guj.com.br">GUJ.com.br</a>, na sua segunda versão (screenshot acima), o site sofreu diversas quedas e passou por muitos períodos de lentidão, mesmo depois de ter migrado para um servidor dedicado. A grande verdade é que por um bom tempo ficamos devendo a devida atenção ao deployment do GUJ. Sempre que um problema acontecia alguém simplesmente reiniciava o servidor, sem investigar as causas reais do problema com profundidade.</p>
<p>Dada a relação próxima que a Caelum sempre teve com o site, já que dois dos fundadores do GUJ são também os fundadores da Caelum, resolvemos assumir de vez a posição de <strong>criadores</strong> do GUJ. A Caelum agora é a <strong>patrocinadora e mantenedora oficial</strong> do GUJ. Recentemente andamos gastando algum tempo, tentando acabar de vez com estes problemas que o GUJ a tanto tempo sofre. Felizmente, a melhora já é bem perceptível!</p>
<p>Há algum tempo atrás, o GUJ ficava esporadicamente muito lento. Para resolver estes problemas de lentidão, o primeiro passo foi conseguir um servidor dedicado, pago pelos anúncios espalhados pelo site. Já faz tempo que o GUJ roda neste servidor dedicado e desde então a performance se tornou quase sempre aceitável.</p>
<p>Porém, o servidor dedicado não resolveu todos os problemas, já que <code>java.lang.OutOfMemoryError</code> sempre foi o principal problema enfrentado pelo GUJ. Sempre desconfiamos que o culpado poderia ser o código do próprio GUJ, ou até do JFórum, que deveriam conter algum <a href="http://en.wikipedia.org/wiki/Memory_leak">vazamento de memória</a>.</p>
<p>Alguns desenvolvedores da Caelum já tiveram ótimas experiências passadas com o <a href="http://jetty.mortbay.org">Jetty</a>, que é um excelente servidor web e servlet contêiner. Foi, inclusive, um dos servidores Java pioneiros a usar conectores <a href="http://java.sun.com/javase/6/docs/api/java/nio/package-summary.html">NIO (java.nio)</a>. O Jetty foi desenhado para ser embutido em outras aplicações Java e portanto é extremamente leve. Consome bem menos memória que o Tomcat, seu concorrente mais conhecido, e não deixa nada a desejar nas outras características.</p>
<p>O servidor dedicado do GUJ tem 2GB de memória RAM e o Tomcat estava configurado inicialmente para ter um heap máximo de 768MB (<code>-Xmx768M</code>). A primeira tentativa foi aumentar o heap máximo (<code>-Xmx1024M</code>), mas mesmo assim o temível <code>OutOfMemoryError</code> insistia em aparecer.</p>
<p>Resolvemos então dar uma chance ao Jetty. Já que ele consome menos memória, acreditamos que os <code>OutOfMemoryError</code> demorariam mais a aparecer. Logo ao subir, o jetty ocupa 4% da memória do servidor. O impressionante é que em duas semanas no ar, o uso total de memória não passou de 12%. Na verdade, o uso de memória estabilizou em 9% do total, porém recentemente fizemos alguns testes de carga no servidor do guj, com mais do que o dobro do número de conexões que o guj recebe hoje nos períodos de pico. Isto fez com que o uso de memória do Jetty pulasse para 12%. Uma diferença <strong>enorme</strong> da quantidade usada pelo Tomcat, que chegava facilmente a 80%.</p>
<p><center><a href="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/top-guj.png" title='uso de memória do Jetty'><img src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/top-guj.png' alt='uso de memória do Jetty' width="480" height="117" border="none" /></a></center>
<p/>
<p>Já temos algum tempo rodando, sem problemas de memória e com o jetty estável usando 9-12% do total da memória do servidor. Já estamos até pensando em descartar a possibilidade de existir um vazamento de memória no código do GUJ ou do JForum. Isto tornaria o Tomcat culpado pelos problemas de memória!</p>
<p>A possibilidade de vazamentos de memória no Tomcat (estávamos com a versão 6.0.14, sem o APR e com Linux Kernel 2.6.22) deste tamanho é um pouco assustadora. Com a base de usuários que o Tomcat tem, muito possivelmente alguém já teria pego este problema muito antes de nós. Provavelmente o problema é de alguma configuração mal feita no Tomcat do GUJ.</p>
<p>Fato é que o Jetty foi uma tentativa que deu certo e o problema está aparentemente resolvido. O Jetty mostrou um uso mais alto de CPU que o Tomcat, chegando a picos de 60% da capacidade total de processamento do servidor, que possui 2 processadores. Através dos testes de carga que fizemos, temos percebido que o Jetty usa bastante CPU para responder diversas requisições simultâneas. Isso não chega a ser um problema, já que os dois processadores que o servidor possui são mais do que suficientes para atender a quantidade de requisições por segundo que o GUJ recebe hoje.</p>
<p>Apesar de termos <a href="http://jira.codehaus.org/browse/JETTY-256">algumas suspeitas</a>, ainda não investigamos a razão do alto uso de CPU. Este é um ponto a ser abordado, caso o GUJ tenha problemas com disponibilidade de processamento algum dia.</p>
<p>Mesmo não representando um problema hoje, esta situação preocupa já que o MySQL rodando na mesma máquina também costuma usar bastante CPU. Isto pode se tornar um problema em algum dia que tenha um pouco mais de requisições por segundo do que o comum, já que o uso de CPU chegava as vezes perto do limite. Felizmente, grande parte das requisições ao servidor do GUJ são para conteúdo estático: imagens, JavaScripts, arquivos CSS, download de pdfs (dos artigos), entre outros. Todo esse conteúdo estático era servido pelo Jetty, contribuindo para o alto uso de CPU. Resolvemos então tentar um <a href="http://en.wikipedia.org/wiki/Reverse_proxy">proxy reverso</a> na frente do Jetty, especificamente para servir este conteúdo estático.</p>
<p><center><img src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/reverse_proxy.png' alt='proxy reverso servindo conteúdo estático' /></center>
<p/>
<p>Existem diversas alternativas de <a href="http://en.wikipedia.org/wiki/Reverse_proxy">proxy reverso</a> e a primeira a ser considerada quase sempre é o conhecido servidor web <a href="http://httpd.apache.org/">Apache Httpd</a>, com a adição do <a href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html">mod_proxy</a>. É uma excelente solução e existe bastante documentação para fazer tudo funcionar. No entanto, faz um tempo que eu já estava querendo testar o servidor <a href="http://nginx.net/">russo</a> <a href="http://wiki.codemongers.com/Main">Nginx</a>, tão falado pelo pessoal da <a href="http://engineyard.com/">Engine Yard</a>.</p>
<p>A desvantagem do Nginx para o Apache Httpd é a documentação não tão extensa. Esse é um grande problema para a comunidade do Nginx, que tem se esforçado em traduzir grande parte do que está escrito em russo. Apesar disso, o Nginx é impressionante e superou todas as nossas expectativas. Além de ser extremamente rápido, consome <strong>pouquíssimos</strong> recursos. Cada um dos processos (1 master + 5 workers) consome na maior parte do tempo apenas <strong>1%</strong> de CPU e <strong>0.2%</strong> da memória disponível do nosso servidor. Incrível!</p>
<p>O conteúdo estático do GUJ agora é todo servido pelo Nginx; as requisições nem chegam ao Jetty. Além disso, o Nginx, como um bom proxy reverso, oferece diversas otimizações. Uma essencial para o GUJ é o preenchimento automático dos cabeçalhos HTTP de cache, sugerindo aos browsers que façam cache do conteúdo estático. Agora o consumo de CPU diminuiu consideravalmente.</p>
<p><center><a href='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/nginx.png' title='uso de recursos do nginx no GUJ'><img src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/nginx.png' alt='uso de recursos do nginx no GUJ' /></a></center>
<p/>
<p>Não fizemos nenhum comparativo científico de performance, mas a melhora dos tempos de resposta do GUJ está visível. Frequentemente tenho a sensação de que o site está <em>&#8220;voando&#8221;</em>.</p>
<p>Configuramos também no Nginx a <a href="http://www.nginx.eu/nginx-rrd.html">exibição de algumas estatísticas de acesso</a>; tão valiosas ao GUJ. É <strong>assustador</strong> como o padrão de acesso se repete a cada dia, e a cada semana. Repare como o gráfico de requisições por segundo é praticamente <strong>idêntico</strong> para cada dia (com exceção do sábado e domingo, que são parecidos entre si).</p>
<p><center><a href='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj-requests-week.png' title='requisições por segundo no GUJ, em uma semana'><img src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj-requests-week.png' alt='requisições por segundo no GUJ, em uma semana' border="none" width="558" height="160"/></a></center>
<p/>
<p>Temos também o interesante gráfico de conexões por segundo, que mostra relação média aproximada de <strong>3 requisições por conexão</strong>.</p>
<p><center><a href='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj-connections-week.png' title='conexões por segundo no GUJ, em uma semana'><img src='http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/06/guj-connections-week.png' alt='conexões por segundo no GUJ, em uma semana' border="false" width="558" height="190"/></a></center>
<p/>
<p>Note que a legenda do gráfico está errada, já que deveria mostrar <em>&#8220;connections/sec&#8221;</em>. O pequeno pico que dá para ver no gráfico aparece por causa de alguns testes de carga que fizemos neste dia. Pode ser desconsiderado.</p>
<p>Fizemos ainda algumas experiências com múltiplos servidores Jetty por trás do Nginx, funcionando também como <a href="http://en.wikipedia.org/wiki/Load_balancing_(computing)">balanceador de carga</a>. Espero em breve postar sobre nossa experiência em geral com balanceamento de carga e alguns outros truques que pudemos testar nesta experiência do GUJ e em alguns clientes.</p>
<p>Aproveitando o post, o <a href="http://www.guj.com.br/posts/list/94487.java">GUJ recentemente comemorou</a> a marca de <strong>meio milhão de mensagens</strong>. É um orgulho poder fazer parte desta comunidade, e mais ainda por poder torná-la cada vez melhor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/melhorando-o-guj-jetty-nio-e-load-balancing/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

