Otimização de Servidores: Ajustes Essenciais para o Tomcat

  1. Altere a porta de gerenciamento Telnet (8005) e o comando de shutdown, pois são considerados pontos de acesso perigosos.
  2. Modifique a porta padrão do AJP (8009) para um valor maior que 1024, evitando conflitos com portas de sistema.
  3. Restrinja o acesso à porta AJP usando regras de fireawll (iptables), permitindo conexões apenas de servidores de produção.
  4. Remova o arquivo conf/tomcat-users.xml padrão. Após a reinicialização do Tomcat, um novo arquivo será gerado automaticamente.
  5. Exclua todos os diretórios e arquivos padrão localizados em {Diretório de Instalação do Tomcat}/webapps.
  6. Confiugre o diretório raiz de aplicações do Tomcat para um local fora do diretório de instalação.
  7. Execute o Tomcat com um usuário sem privilégios de root e restrinja estritamente as permissões de acesso aos diretórios desse usuário.
  8. Se precisar expor o serviço diretamente na porta 80, configure o redirecionamento usando regras de firewall (iptables) após iniciar o Tomcat com uma conta de usuário comum.
  9. Habilite o registro de cabeçalhos Referer e User-Agent nos logs de acesso padrão do Tomcat.

Desempenho do Tomcat

  1. Ative o registro de logs do Coletor de Lixo (GC) e configure os tamanhos inicial e máximo do heap da JVM.
  2. Colabore com a equipe de desenvolvimento para otimizar o código das aplicações.
  3. Aumente a memória RAM disponível para o servidor.

Ajustes de Memória JVM

A otimização da memória da JVM é realizada principalmente nos arquivos de configuração catalina.bat (Windows) ou catalina.sh (Linux). No Linux, adicione a seguinte linha ao catalina.sh:

```

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m"

  

Onde:

- `-server`: Habilita a versão do servidor da JVM, otimizada para aplicações de longa duração.
- `-Xms`: Define a quantidade mínima de memória heap para a JVM na inicialização.
- `-Xmx`: Define a quantidade máxima de memória heap que a JVM pode alocar. É reocmendável que `-Xms` e `-Xmx` tenham valores idênticos para evitar flutuações de desempenho causadas por coletas de lixo (GC) frequentes.
- `-XX:MaxPermSize`: Especifica o tamanho máximo da área de memória permanente (Permanent Generation), onde classes e metadados são armazenados.
 
### Tratamento de Erros de Memória

#### 1. `java.lang.OutOfMemoryError: Java heap space`

O Tomcat, por padrão, pode utilizar uma quantidade limitada de memória heap (frequentemente 128MB). Para aplicações maiores, essa limitação pode ser insuficiente, levando a erros de falta de memória e falhas no sistema (exibindo erro 500 no cliente). A solução comum é ajustar os parâmetros `-Xms` e `-Xmx`, geralmente definindo ambos para o mesmo valor e configurando-os para ocupar até 80% da memória física disponível.

 
    ```

set JAVA_OPTS=-Xms512m -Xmx512m
    

2. java.lang.OutOfMemoryError: PermGenspace

Este erro indica que a área de memória permanente (Permanent Generation space), usada para armazenar classes e metadados carregados pela JVM, está cheia. Ao contrário da área de heap, o GC não limpa a PermGen durante a execução principal do programa. Se a aplicação utiliza um grande número de classes ou arquivos JAR de terceiros, o espaço pode se esgotar, especialmente durante a pré-compilação de JSPs ou ao carregar muitos JARs.

Solução:

```

set JAVA_OPTS=-XX:PermSize=128m -XX:MaxPermSize=256m

  

### Considerações sobre o Coletor de Lixo (GC)

Ao ajustar os tamanhos de heap (`-Xms` e `-Xmx`), é crucial considerar o comportamento do GC. Se o sistema gasta muito tempo realizando a coleta de lixo, pode ser necessário reduzir o tamanho do heap. Idealmente, uma coleta de lixo completa não deve exceder 3-5 segundos. Se o GC se tornar um gargalo, analise os parâmetros de GC e seus efeitos no desempenho. Uma regra geral é usar até 80% da memória física para o heap. Lembre-se de aumentar a memória ao adicionar processadores, pois a alocação pode ser paralela, mas a coleta de lixo nem sempre é.

Perguntas Comuns em Entrevistas sobre Tomcat
--------------------------------------------

### Qual a porta padrão do Tomcat e como modificá-la?

A porta padrão do Tomcat é 8080. Para alterá-la, edite o arquivo `conf/server.xml` e localize a configuração do conector HTTP. Modifique o atributo `port` para o valor desejado.

</div>

Tags: tomcat JVM Otimização Segurança Memória

Publicado em 9-21 23:25