Atualizando o Apache Tomcat no RHEL 9 via AppStream e seus desafios
Tarcisio Freitas

Tarcisio Freitas @tarcisiogf

About: DBA Oracle, Oracle Apex Architect / Developer

Location:
Rio de Janeiro, Brazil
Joined:
Aug 21, 2024

Atualizando o Apache Tomcat no RHEL 9 via AppStream e seus desafios

Publish Date: Jul 8
3 0

Este guia detalha o processo de atualização do Apache Tomcat para ultima versão (9.0.87) em um ambiente Red Hat Enterprise Linux (RHEL) 9.4 (Plow), abordando desafios específicos encontrados em julho de 2025. A motivação para este artigo surgiu de falhas de memória na área survival da JVM em aplicações Java críticas, que causavam travamentos mesmo com poucos usuários conectados.
Escolhemos o Tomcat para hospedar o ORDS/APEX e outras aplicações em java.
Após algumas inciativas como atualização do Java 8 para o Java 21 e monitoramento constante via jstat, o memory leak persistia. O suporte da Red Hat recomendou atualizar o Tomcat para uma versão mantida nos repositórios AppStream.

1. Pré-requisitos

Antes de iniciar, verifique as seguintes condições:

  • Sistema operacional: RHEL 9.4 com repositórios AppStream configurados (recomenda-se o uso do dnf).
  • Permissões de superusuário (sudo).
  • JDK instalado e atualizado, compatível com a versão do Tomcat (mínimo Java 8 para Tomcat 9).

2. Preparação do Ambiente

2.1. Backup da Instalação Atual

Realize um backup completo da instalação do Tomcat, preservando permissões, links simbólicos e metadados:

sudo cp -rp --preserve=all /opt/tomcat /backup_path/tomcat/ -v
Enter fullscreen mode Exit fullscreen mode

Nota: A opção --preserve=all mantém links simbólicos, proprietários, grupos e permissões.

2.2. Remoção de Versões Antigas

Remova pacotes e arquivos residuais do Tomcat:

sudo dnf remove 'tomcat*' -y
sudo rm -f /etc/systemd/system/tomcat.service
Enter fullscreen mode Exit fullscreen mode

Confirme a remoção completa:

rpm -ql tomcat | less
sudo ls -lha /etc/tomcat/
sudo ls -lha /usr/share/tomcat/
Enter fullscreen mode Exit fullscreen mode

3. Instalação do Tomcat 9 via AppStream

3.1. Atualização e Instalação

Atualize o sistema e instale o Tomcat e seus módulos:

sudo dnf update -y
sudo dnf install tomcat tomcat-webapps tomcat-admin-webapps -y
Enter fullscreen mode Exit fullscreen mode

3.2. Ativação do Serviço

Habilite e inicie o serviço do Tomcat:

sudo systemctl enable --now tomcat
sudo systemctl daemon-reload
Enter fullscreen mode Exit fullscreen mode

3.3. Configuração do Firewall

Libere a porta 8080, se necessário:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
Enter fullscreen mode Exit fullscreen mode

4. Estrutura de Diretórios

A tabela abaixo compara os caminhos do Tomcat instalado via AppStream com a instalação clássica:

Categoria Caminho (AppStream - RHEL) Caminho (Clássico)
Configuração /etc/tomcat [TOMCAT_HOME]/conf
Aplicações /var/lib/tomcat/webapps [TOMCAT_HOME]/webapps
Logs /var/log/tomcat [TOMCAT_HOME]/logs
Binários /usr/share/tomcat [TOMCAT_HOME]/bin

5. Configurações e Deploy de Aplicações

5.1. Restauração de Configurações

Faça backup do arquivo de configuração padrão e restaure configurações anteriores:

sudo mv /etc/tomcat/tomcat-users.xml /etc/tomcat/tomcat-users.xml.bkp
sudo cp /backup_path/tomcat/conf/tomcat-users.xml /etc/tomcat/tomcat-users.xml
sudo cp /backup_path/tomcat/webapps/manager/META-INF/context.xml /usr/share/tomcat/webapps/manager/META-INF/context.xml
Enter fullscreen mode Exit fullscreen mode

5.2. Deploy de Aplicações

Copie os arquivos .war e configurações de contexto do backup:

sudo cp /backup_path/tomcat/webapps/*.war /usr/share/tomcat/webapps/
sudo cp /backup_path/tomcat/conf/Catalina/localhost/*.xml /etc/tomcat/Catalina/localhost/
sudo chown root:tomcat /usr/share/tomcat/webapps/*.war
sudo chmod 644 /usr/share/tomcat/webapps/*.war
sudo chown root:tomcat /etc/tomcat/Catalina/localhost/*.xml
sudo chmod 644 /etc/tomcat/Catalina/localhost/*.xml
Enter fullscreen mode Exit fullscreen mode

5.3. Reiniciar o Tomcat

Atualize e reinicie o serviço:

sudo systemctl daemon-reload
sudo systemctl restart tomcat
Enter fullscreen mode Exit fullscreen mode

6. Ajustes de Memória (CATALINA_OPTS)

6.1. Recomendações Iniciais

Existe uma calculadora que a Redhat oferta para o auxilio da configuração dos parâmetros da JVM muito interessante:

Este aplicativo permite especificar vários parâmetros para o ambiente e a JVM específicos, gerando opções otimizadas para a JVM. Ele também explica por que cada opção é gerada e fornece um link para a base de conhecimento da Red Hat para problemas e soluções conhecidos.

JVM Calculator

E neste artigo há um bom conteúdo para a compressão da alocação de Memória da JVM

6.2. Configuração do Systemd

Edite o override do serviço Tomcat:

sudo systemctl edit tomcat
Enter fullscreen mode Exit fullscreen mode

Adicione o seguinte conteúdo:

[Service]
Environment="CATALINA_OPTS=
-Xms20G -Xmx20G -server \
-XX:+UseG1GC \
-XX:+ExplicitGCInvokesConcurrent \
-XX:MaxGCPauseMillis=500 \
-Xlog:gc*:file=/var/log/tomcat/gc.log:time,uptime,level,tags:filecount=5,filesize=10M \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/"
Enter fullscreen mode Exit fullscreen mode

ou assim

[Service]
Environment="CATALINA_OPTS=-Xms20G -Xmx20G -server -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=500 -Xlog:gc*:file=/var/log/tomcat/gc.log:time,uptime,level,tags:filecount=5,filesize=10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/"
Enter fullscreen mode Exit fullscreen mode

Nota: Se houver problemas com o formato (ocorre na hora do start do tomcat), dependendo da sua paciencia em acertar a diagramação correta, escolha a segunda opção.

6.3. Permissões de Logs

Ajuste as permissões do diretório de logs:

sudo chown -R tomcat:tomcat /var/log/tomcat
sudo chmod 750 /var/log/tomcat
Enter fullscreen mode Exit fullscreen mode

6.4. Reiniciar e Validar

Reinicie e verifique o serviço:

sudo systemctl restart tomcat
sudo systemctl status tomcat --no-pager
sudo systemctl show tomcat | grep CATALINA_OPTS
Enter fullscreen mode Exit fullscreen mode

Por que usar --no-pager?

  • Exibe a saída completa no terminal.
  • Facilita redirecionamento ou processamento por outros comandos.
  • Evita travamentos em scripts automatizados.

6.5. Escolha do Garbage Collector

Evite conflitos entre coletores de lixo. Escolha apenas um:

  • Para G1GC (recomendado para Java recente):
-XX:+UseG1GC
Enter fullscreen mode Exit fullscreen mode
  • Para ParallelGC:
-XX:+UseParallelGC
Enter fullscreen mode Exit fullscreen mode

7. Problemas com Bibliotecas (commons-dbcp)

7.1. Contexto do Problema

Algumas aplicações falharam no deploy devido à ausência da biblioteca commons-dbcp. A Red Hat empacota o Tomcat de forma minimalista, excluindo bibliotecas legadas como commons-dbcp 1.4.

Confirme a indisponibilidade:

sudo dnf search dbcp
Enter fullscreen mode Exit fullscreen mode

7.2. Solução: Instalação Manual

Passo 1: Criar Diretório Temporário

mkdir -p ~/downloads/missing_libs_dnf_tomcat/
cd ~/downloads/missing_libs_dnf_tomcat/
Enter fullscreen mode Exit fullscreen mode

Passo 2: Baixar Bibliotecas

wget https://archive.apache.org/dist/commons/dbcp/binaries/commons-dbcp-1.4-bin.zip
wget https://archive.apache.org/dist/commons/pool/binaries/commons-pool-1.6-bin.zip
Enter fullscreen mode Exit fullscreen mode

Passo 3: Descompactar e Copiar

unzip commons-dbcp-1.4-bin.zip
unzip commons-pool-1.6-bin.zip
sudo cp commons-dbcp-1.4/commons-dbcp-1.4.jar /usr/share/tomcat/lib/
sudo cp commons-pool-1.6/commons-pool-1.6.jar /usr/share/tomcat/lib/
Enter fullscreen mode Exit fullscreen mode

Passo 4: Ajustar catalina.properties (Opcional)

Se houver erros de JNDI, comente a linha referente ao DataSource.Factory:

sudo vi /etc/tomcat/catalina.properties
Enter fullscreen mode Exit fullscreen mode

Localize e comente:

#javax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory
Enter fullscreen mode Exit fullscreen mode

Passo 5: Reiniciar o Tomcat

sudo systemctl restart tomcat
Enter fullscreen mode Exit fullscreen mode

Conclusão

Este guia documenta a solução para falhas de memória na JVM em um ambiente RHEL 9.4, resolvidas pela atualização do Java e do Tomcat 9 via AppStream. O processo incluiu backup, remoção de versões antigas, instalação, configuração de memória e resolução de problemas com bibliotecas legadas. Esperamos que este conteúdo, registrado em julho de 2025, auxilie outros profissionais enfrentando desafios semelhantes.

Por Tarcisio Freitas
Oracle DBA, Oracle APEX Architect, Senior APEX Developer.

English version:
https://dev.to/tarcisiogf/updating-apache-tomcat-on-rhel-via-appstream-challenges-and-solutions-28d0

header_image/credit:https://www.novoshore.com/2025/01/28/ords-24-4-http-removal

Comments 0 total

    Add comment