Seguinte,
Estou com um problemã num software que tenho que dar suporte/manutenção e que [pra variar] os desenvovledores originais sumiram.
Esse software gera uns relatórios muito grandes que estão consumindo a memória. O servidor possui 2 Xeon com hyperthreading que fingem ser 4, não consome muita CPU. A memória está em 1.7GB.
Em momentos de pico, a máquina dá OutOfMemory, consumindo toda a memória e depois entrando num consumo eterno de CPU. Fazendo um tuning no GC, consegui diminuir esse burst de CPU e a máquina não senta mais, agora ela se recupera após uma dezena de OutOfMemory, mas a performance ainda está sofrível.
Uma outra versão deve ser iniciada em algum tempo, mas por enquanto o sofwtare não pode ter mudanças bruscas. Uma solução apresentada foi dividir o processamento em duas JVMs com 1GB cada. Reza a lenda interna que a JVM da Sun (BTW: 1.4.2_05) não consegue gerenciar bem mais que 1GB.
A aplicação roda um JBoss 3.2.3 com zilhões de EJBs e Tomcat 4.qualquercoisa. Essa é uma das otimizações que vamos fazer, empacotando tudo num patch.
Perguntas:
1 - É verdade que a JVM da Sun se embanana com tanta memória? Lembre que a carga é grande.
2 - Duas JVMs num servidor podem ajudar?
3 - JBoss clusterizado faz replicação de HTTP Session?
4 - Esse relatório é um PDF em array de bytes jogado no cliente de dentro do Servlet, colocar isso num arquivo em disco e redirecionar ia ser mais fácil? Imagino que a bufferização e outras coisitas de I/O possam ajudar, mas será que isso dá um gás?
No momento estou conduzindo uma sessão de profiling no aplicativo, para identificar algumas informações a mais.
Alguém?!?
[]s


