Tomcat — Cheatsheet
If you like this project, consider supporting me on Buy Me a Coffee ☕️
🐱 Tomcat — Cheatsheet
Description
Apache Tomcat is an open-source Java servlet container developed by the Apache Software Foundation. It implements Jakarta Servlet, Jakarta Server Pages (JSP), and WebSocket specifications. Tomcat is the de facto standard for deploying Java web applications (WAR/EAR files).
Common use cases / Типичные сценарии:
- Running Java web applications (Spring Boot, JSP, Servlets) / Запуск Java веб-приложений
- WAR/EAR deployment container / Контейнер для деплоя WAR/EAR
- Development and testing of Java EE / Jakarta EE apps / Разработка и тестирование Jakarta EE
- Embedded servlet engine in Spring Boot / Встроенный сервлет-движок в Spring Boot
[!NOTE] Tomcat remains the most popular Java servlet container. Tomcat 10+ migrated to Jakarta EE (
jakarta.*namespace). For full Java EE / Jakarta EE application server features (EJB, JMS, etc.), consider WildFly or Payara. For microservices, Spring Boot embedded Tomcat or Quarkus are modern alternatives. Tomcat — самый популярный Java servlet-контейнер. Tomcat 10+ перешёл на Jakarta EE. Для полного Java EE сервера используйте WildFly или Payara. Для микросервисов — Spring Boot embedded или Quarkus.
Installation & Configuration
Package Installation / Установка пакетов
# Debian/Ubuntu
sudo apt update && sudo apt install tomcat9 # Install Tomcat 9 / Установить Tomcat 9
sudo apt install tomcat10 # Install Tomcat 10 / Установить Tomcat 10
# RHEL/CentOS/AlmaLinux
sudo dnf install tomcat # Install Tomcat / Установить Tomcat
sudo systemctl enable tomcat # Enable at boot / Автозапуск
# Manual installation / Ручная установка
wget https://dlcdn.apache.org/tomcat/tomcat-10/v<VERSION>/bin/apache-tomcat-<VERSION>.tar.gz
tar -xzf apache-tomcat-<VERSION>.tar.gz
sudo mv apache-tomcat-<VERSION> /opt/tomcat
Default Paths / Пути по умолчанию
# Debian/Ubuntu (package install)
/etc/tomcat9/ # Configuration directory / Директория конфигурации
/etc/tomcat9/server.xml # Main config / Основной конфиг
/etc/tomcat9/tomcat-users.xml # Users config / Пользователи
/var/lib/tomcat9/webapps/ # Webapps directory / Директория приложений
/var/log/tomcat9/ # Logs directory / Директория логов
/usr/share/tomcat9/ # Tomcat home / Домашняя директория
# RHEL/CentOS (package install)
/etc/tomcat/ # Configuration directory
/var/lib/tomcat/webapps/ # Webapps directory
/var/log/tomcat/ # Logs directory
# Manual installation
/opt/tomcat/conf/server.xml # Main config
/opt/tomcat/webapps/ # Webapps directory
/opt/tomcat/logs/ # Logs directory
Environment Variables / Переменные окружения
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # Java home / Путь к Java
export CATALINA_HOME=/opt/tomcat # Tomcat home / Домашняя директория Tomcat
export CATALINA_BASE=/opt/tomcat # Tomcat base / Базовая директория
Default Ports / Порты по умолчанию
- 8080 — HTTP connector (default web port)
- 8443 — HTTPS connector (SSL/TLS)
- 8005 — Shutdown port
- 8009 — AJP connector (Apache integration)
Core Management
Service Control / Управление сервисом
# Systemd (package install) / Systemd (установка пакетом)
sudo systemctl start tomcat9 # Start service / Запустить сервис
sudo systemctl stop tomcat9 # Stop service / Остановить сервис
sudo systemctl restart tomcat9 # Restart service / Перезапустить сервис
sudo systemctl status tomcat9 # Service status / Статус сервиса
sudo systemctl enable tomcat9 # Enable at boot / Автозапуск
# RHEL/CentOS: replace tomcat9 with tomcat
# Manual installation / Ручная установка
/opt/tomcat/bin/startup.sh # Start Tomcat / Запустить Tomcat
/opt/tomcat/bin/shutdown.sh # Stop Tomcat / Остановить Tomcat
/opt/tomcat/bin/catalina.sh run # Run in foreground / Запуск на переднем плане
Check Running Status / Проверка статуса
ps aux | grep tomcat # Check process / Проверить процесс
curl http://localhost:8080 # Test HTTP / Тест HTTP
netstat -tlnp | grep :8080 # Check port / Проверить порт
sudo lsof -i :8080 # Alternative / Альтернатива
Deployment
Deploy WAR File / Деплой WAR файла
# Drop-in deployment / Простой деплой
sudo cp app.war /var/lib/tomcat9/webapps/ # Copy WAR / Копировать WAR
# Tomcat auto-deploys on detect / Tomcat автоматически развернет
# Deploy as ROOT app / Деплой как ROOT приложение
sudo rm -rf /var/lib/tomcat9/webapps/ROOT # Remove default ROOT / Удалить ROOT
sudo cp app.war /var/lib/tomcat9/webapps/ROOT.war # Deploy as ROOT / Развернуть как ROOT
# Manual unpacking / Ручная распаковка
sudo mkdir /var/lib/tomcat9/webapps/app
sudo unzip app.war -d /var/lib/tomcat9/webapps/app/ # Exploded deployment / Распакованный деплой
Undeploy Application / Удаление приложения
sudo rm /var/lib/tomcat9/webapps/app.war # Remove WAR / Удалить WAR
sudo rm -rf /var/lib/tomcat9/webapps/app/ # Remove directory / Удалить директорию
sudo systemctl restart tomcat9 # Restart / Перезапустить
Hot Deployment / Горячий деплой
# Enable auto-deployment in server.xml / Включить автодеплой в server.xml
# <Host autoDeploy="true" unpackWARs="true">
# Simply copy new WAR, Tomcat will redeploy automatically
# Просто скопируй новый WAR, Tomcat развернет автоматически
Configuration Files
server.xml / Основной конфигурационный файл
/etc/tomcat9/server.xml
<!-- Main configuration file / Основной конфигурационный файл -->
<!-- Shutdown port / Порт остановки -->
<Server port="8005" shutdown="SHUTDOWN">
<!-- HTTP Connector / HTTP коннектор -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- HTTPS Connector / HTTPS коннектор -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/path/to/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
<!-- AJP Connector (for Apache integration) / AJP коннектор (для Apache) -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- Engine and Host / Движок и хост -->
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
tomcat-users.xml / Пользователи и роли
/etc/tomcat9/tomcat-users.xml
<tomcat-users>
<!-- Manager GUI access / Доступ к Manager GUI -->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="<USER>" password="<PASSWORD>" roles="manager-gui,admin-gui"/>
</tomcat-users>
context.xml / Конфигурация контекста
/etc/tomcat9/context.xml or META-INF/context.xml
<Context>
<!-- Database connection pool / Пул соединений БД -->
<Resource name="jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="<USER>" password="<PASSWORD>"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://<IP>:3306/mydb"/>
</Context>
web.xml / Дескриптор веб-приложения
/etc/tomcat9/web.xml or WEB-INF/web.xml
<web-app>
<!-- Default servlet / Сервлет по умолчанию -->
<!-- Session timeout / Таймаут сессии -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
JVM Tuning
Set JVM Options / Настройка JVM
# Debian/Ubuntu: Edit /etc/default/tomcat9
# RHEL/CentOS: Edit /etc/tomcat/tomcat.conf
# Manual install: Create/edit /opt/tomcat/bin/setenv.sh
# Example setenv.sh / Пример setenv.sh
export JAVA_OPTS="-Xms512m -Xmx1024m" # Heap size / Размер кучи
export JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m" # Metaspace
export JAVA_OPTS="$JAVA_OPTS -server" # Server mode / Режим сервера
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC" # G1 garbage collector / Сборщик мусора G1
export CATALINA_OPTS="-Dspring.profiles.active=prod" # App options / Опции приложения
export CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8" # File encoding
Common JVM Options / Общие опции JVM
# Memory settings / Настройки памяти
-Xms512m # Initial heap / Начальный размер кучи
-Xmx2048m # Maximum heap / Максимальный размер кучи
-XX:MetaspaceSize=256m # Metaspace size / Размер Metaspace
-XX:MaxMetaspaceSize=512m # Max Metaspace / Макс. Metaspace
# Garbage Collection / Сборка мусора
-XX:+UseG1GC # Use G1 GC / Использовать G1 GC
-XX:+UseParallelGC # Parallel GC
-XX:+UseConcMarkSweepGC # CMS GC (deprecated)
# Performance / Производительность
-server # Server mode / Режим сервера
-XX:+UseStringDeduplication # String dedup / Дедупликация строк
# Debugging / Отладка
-Xdebug # Enable debug / Включить отладку
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 # Remote debug
Production JVM Settings / Настройки для продакшена
export JAVA_OPTS="-Xms2g -Xmx2g" # Equal min/max for predictability
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
export JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"
export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" # Heap dump on OOM
export JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/var/log/tomcat9/"
export JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcat9/gc.log"
Connectors & Ports
HTTP Connector / HTTP коннектор
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
enableLookups="false"
acceptCount="100"
URIEncoding="UTF-8" />
HTTPS Connector (SSL/TLS) / HTTPS коннектор
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
scheme="https" secure="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/etc/tomcat9/keystore.jks"
certificateKeystorePassword="<PASSWORD>"
type="RSA" />
</SSLHostConfig>
</Connector>
AJP Connector (Apache mod_jk) / AJP коннектор
<Connector port="8009" protocol="AJP/1.3"
redirectPort="8443"
secretRequired="false" />
Behind Reverse Proxy / За обратным прокси
<!-- Add RemoteIpValve to preserve client IP / Добавить RemoteIpValve для сохранения IP -->
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
proxiesHeader="X-Forwarded-By"
protocolHeader="X-Forwarded-Proto" />
<!-- Or configure connector / Или настроить коннектор -->
<Connector port="8080" protocol="HTTP/1.1"
proxyName="<HOST>"
proxyPort="80"
scheme="http" />
Security
Manager Application Security / Безопасность Manager
# Restrict Manager access to localhost / Ограничить Manager локалхостом
# Edit /var/lib/tomcat9/webapps/manager/META-INF/context.xml
# Allow specific IPs / Разрешить конкретные IP
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|<IP>" />
</Context>
SSL/TLS Configuration / Конфигурация SSL/TLS
# Create keystore / Создать keystore
keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/tomcat9/keystore.jks
# Import certificate / Импортировать сертификат
keytool -import -alias tomcat -file certificate.crt -keystore /etc/tomcat9/keystore.jks
# List certificates / Список сертификатов
keytool -list -keystore /etc/tomcat9/keystore.jks
Remove Default Apps / Удалить приложения по умолчанию
# Remove examples, docs, manager, host-manager for security
# Удалить примеры, документацию, manager для безопасности
sudo rm -rf /var/lib/tomcat9/webapps/examples
sudo rm -rf /var/lib/tomcat9/webapps/docs
sudo rm -rf /var/lib/tomcat9/webapps/manager
sudo rm -rf /var/lib/tomcat9/webapps/host-manager
Security Best Practices / Лучшие практики безопасности
- Remove default applications / Удали приложения по умолчанию
- Use strong passwords in tomcat-users.xml / Используй сильные пароли
- Restrict Manager access by IP / Ограничь доступ к Manager по IP
- Run Tomcat as non-root user / Запускай Tomcat не от root
- Keep Tomcat updated / Обновляй Tomcat
- Use HTTPS / Используй HTTPS
- Disable unnecessary connectors / Отключи ненужные коннекторы
Logs & Monitoring
Log Files / Файлы логов
# Debian/Ubuntu
sudo tail -f /var/log/tomcat9/catalina.out # Main log / Основной лог
sudo tail -f /var/log/tomcat9/catalina.<DATE>.log # Daily log / Дневной лог
sudo tail -f /var/log/tomcat9/localhost.<DATE>.log # Localhost log / Лог localhost
sudo tail -f /var/log/tomcat9/manager.<DATE>.log # Manager log / Лог Manager
sudo tail -f /var/log/tomcat9/host-manager.<DATE>.log # Host Manager log
# Manual installation
sudo tail -f /opt/tomcat/logs/catalina.out
Enable Access Logs / Включить логи доступа
<!-- Add to server.xml in <Host> section -->
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
JMX Monitoring / Мониторинг JMX
# Enable JMX remote monitoring / Включить удаленный мониторинг JMX
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9999"
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
# Connect with JConsole / Подключение через JConsole
jconsole <IP>:9999
Application Monitoring / Мониторинг приложений
# Access Manager GUI / Доступ к Manager GUI
http://localhost:8080/manager/html
# Login with user from tomcat-users.xml
# Вход с пользователем из tomcat-users.xml
Troubleshooting & Tools
Common Issues / Частые проблемы
# Port already in use / Порт уже используется
sudo netstat -tlnp | grep :8080 # Check port / Проверить порт
sudo lsof -i :8080 # Alternative / Альтернатива
sudo fuser -k 8080/tcp # Kill process on port / Убить процесс
# Permission denied / Доступ запрещен
sudo chown -R tomcat:tomcat /var/lib/tomcat9/webapps/ # Fix ownership / Исправить владельца
sudo chmod -R 755 /var/lib/tomcat9/webapps/ # Fix permissions / Исправить права
# OutOfMemoryError / Ошибка памяти
# Increase heap size in JAVA_OPTS / Увеличь размер кучи в JAVA_OPTS
export JAVA_OPTS="-Xms1g -Xmx2g"
# Check JAVA_HOME / Проверить JAVA_HOME
echo $JAVA_HOME
which java
java -version
Thread Dump / Дамп потоков
# Get PID / Получить PID
ps aux | grep tomcat
# Generate thread dump / Создать дамп потоков
sudo kill -3 <PID> # Output to catalina.out
sudo jstack <PID> > thread_dump.txt # Save to file / Сохранить в файл
Heap Dump / Дамп кучи
# Generate heap dump / Создать дамп кучи
sudo jmap -dump:format=b,file=/tmp/heap.bin <PID>
# Analyze with tools like Eclipse MAT or VisualVM
# Анализ с помощью Eclipse MAT или VisualVM
Check Configuration / Проверка конфигурации
# Validate server.xml / Проверить server.xml
# Start Tomcat and check logs for errors
# Запусти Tomcat и проверь логи на ошибки
# Check effective configuration / Проверить действующую конфигурацию
# Access Manager → Server Status → Show server configuration
# Доступ Manager → Server Status → Показать конфигурацию сервера
Debug Mode / Режим отладки
# Enable debug mode / Включить режим отладки
export JPDA_ADDRESS=5005
export JPDA_TRANSPORT=dt_socket
/opt/tomcat/bin/catalina.sh jpda start
# Connect debugger to port 5005 / Подключить отладчик к порту 5005
Performance Tuning / Настройка производительности
# Increase connector threads / Увеличить потоки коннектора
# Edit maxThreads in server.xml Connector
# Редактировать maxThreads в Connector в server.xml
# Enable HTTP/2 / Включить HTTP/2
# Use NIO2 or APR connector with upgradeProtocol
# Использовать NIO2 или APR коннектор с upgradeProtocol
# Enable compression / Включить сжатие
<Connector compression="on"
compressibleMimeType="text/html,text/xml,text/plain,text/css,application/javascript,application/json" />
Quick Reference / Краткая справка
Essential Commands / Основные команды
sudo systemctl status tomcat9 # Status / Статус
sudo systemctl restart tomcat9 # Restart / Перезапустить
sudo tail -f /var/log/tomcat9/catalina.out # Tail main log / Хвост основного лога
sudo cp app.war /var/lib/tomcat9/webapps/ # Deploy WAR / Деплой WAR
sudo rm -rf /var/lib/tomcat9/webapps/app* # Undeploy / Удалить приложение
Best Practices / Лучшие практики
- Set equal
-Xmsand-Xmxfor stable performance / Установить равные-Xmsи-Xmx - Use G1GC for better GC performance / Используй G1GC для лучшей производительности
- Enable heap dump on OOM / Включи heap dump при OOM
- Monitor logs regularly / Регулярно проверяй логи
- Remove default applications / Удали приложения по умолчанию
- Use HTTPS in production / Используй HTTPS в продакшене
- Configure behind reverse proxy / Настрой за обратным прокси
- Set up log rotation / Настрой ротацию логов
- Keep Tomcat and Java updated / Обновляй Tomcat и Java
Logrotate Configuration / Конфигурация Logrotate
/etc/logrotate.d/tomcat9
/var/log/tomcat9/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 tomcat adm
copytruncate
}
/var/log/tomcat9/catalina.out {
daily
rotate 7
compress
missingok
notifempty
size 100M
copytruncate
}
[!WARNING] Use
copytruncatefor Tomcat logs as the JVM keeps file handles open. Используйтеcopytruncateдля логов Tomcat, так как JVM держит файлы открытыми.
Documentation Links
- Apache Tomcat Documentation
- Tomcat Configuration Reference
- Tomcat Manager App HowTo
- Tomcat SSL/TLS Configuration
- Tomcat JDBC Connection Pool
- Tomcat Security Considerations
- Tomcat 9 Documentation (LTS)