Heap “agressivo” e mudanças nos settings de JVM

Semana que passou pude confirmar na prática uma valiosa dica postada há algum tempo pelo Pete Freitag: a de incluir, no startup do JVM, a opção: -XX:+AggressiveHeap em servidores parrudos. A máquina era um alucinante XSeries 225 (quem me dera ter um destes!) com 2Gb de RAM ECC e “quatro” processadores Xeon (na verdade são apenas dois processadores físicos, mas cada die leva dois processadores quase distintos, semelhante (mas não igual), ao HT do P4. E por incrível que pareça o servidor estava sofrendo (acredito que este servidor seja responsável por um dos sites feitos em CF com maior volume de visitação no país – não posso dizer qual). A melhora na performance não foi muito expressiva (não pude mensurar isso no ambiente de produção), mas o dito cujo pode respirar um pouco mais aliviado com a mesma carga.

O campo “JVM Arguments” do ColdFusion Administrator ficaria como neste arquivo txt.

Um outra pequena (mas importante) modificação que fiz pode ter auxiliado neste alívio: o ColdFusion MX 6.1 vêm com uma versão do Java HotSpot VM já relativamente antiga (de um ano). Se não me engano é a 1.4.2b28. Migrar para a última compatível e existente (1.4.2_05) ajudou um pouco creio (nem pense em usar a beta 1.5, o CF NÃO é compatível (por enquanto) com ela). Não é má idéia fazer isso em qualquer ambiente, independente da sua máquina. A mudança é bastante simples mas requer cuidado:

1) No ColdFusion Administrator, vá na opção do menu superior chamada “System Information” e veja a especificação “Java VM Version”, que deverá ser 1.4.2b28 (se não me engano);
2) Baixe a última versão do Sun J2SE no site da Sun. O J2SE é a base para o Java em qualquer aplicação baseada no Java da Sun, de desktops à servidores (J2EE), exceto aplicações “micro”, que usam um JVM especial (o J2ME));
3) Minha recomendação é de instalá-lo numa pasta simples e com nome sem espaços ou pontos (sei que não tem mais problema, mas eu sempre fui fresco com isso). Em ambiente Windows, por exemplo, instalo em “C:Java”;
4) No ColdFusion Administrator, vá em “Java and JVM” e mude o “Java Virtual Machine Path” para o novo local (no meu exemplo seria: “C:Javajre”) e clique em submit changes;
5) Páre e reinicie o ColdFusion Server. Verifique a mudança de JVM na opção “System Information” do ColdFusion Administrator (passo 1).

IMPORTANTE: caso o serviço do ColdFusion não reinicie, você fez alguma coisa errada e precisará restaurar o setting anterior. Mas como fazer isso se você não tem acesso mais ao CFAdministrator? Simples, no diretório “cf_rootCFusionMXruntimebin” você vai encontrar dois arquivos, um chamado “jvm.bak” e outro “jvm.config”. Você deverá trocar o nome deles. Renomeie o “jvm.config” para qualquer coisa (ex: “jvm.bak2”) e volte o backup, renomeando o “jvm.bak” para “jvm.config”. Pronto, o CF deve reinicializar como antes (ufa!).

Não tenho métricas sobre esta mudança com relação a estas duas JVM. Já fiz uma análise mais detalhada e técnica no passado porém para o ColdFusion MX 6.0 e trocando o HotSpot Client (padrão no MX 6.0) para Server. Mas o resultado é quase sempre certo: a mudança do JVM para um mais novo (da mesma “marca”) quase sempre resulta em melhoria de performance.

Por último, gostaria de disponibilizar um pequeno script CFML que escrevi (com base no excelente livro “Optimizing ColdFusion 5”) há muito tempo atrás, mas que funciona igualmente bem no CFMX e traz para a interface web as métricas do CFStat. Você pode vê-lo em ação aqui, numa máquina da Locaweb, e baixá-lo aqui, em formato zip (míseros 500 bytes!). Use-o, é uma ferramenta simples, mas bastante útil quando se está fazendo o tunning de servidores e aplicações em CF.


One Comment on “Heap “agressivo” e mudanças nos settings de JVM”

  1. Fernando da Silva Trevisan disse:

    Como sempre posts pertinentes, inteligentes e com informações preciosas, Alex. Parabéns e obrigado!