Title: 🐱 Tomcat β€” Cheatsheet Group: Web Servers Icon: 🐱 Order: 3 # 🐱 Tomcat β€” Cheatsheet ## Table of Contents - [Installation & Configuration](#installation--configuration) - [Core Management](#core-management) - [Deployment](#deployment) - [Configuration Files](#configuration-files) - [JVM Tuning](#jvm-tuning) - [Connectors & Ports](#connectors--ports) - [Security](#security) - [Logs & Monitoring](#logs--monitoring) - [Troubleshooting & Tools](#troubleshooting--tools) - [Logrotate Configuration](#logrotate-configuration--конфигурация-logrotate) --- ## Installation & Configuration ### Package Installation / Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ```bash # 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/bin/apache-tomcat-.tar.gz tar -xzf apache-tomcat-.tar.gz sudo mv apache-tomcat- /opt/tomcat ``` ### Default Paths / ΠŸΡƒΡ‚ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ```bash # 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 / ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ```bash 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 / Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСрвисом ```bash # 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 / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса ```bash 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 Ρ„Π°ΠΉΠ»Π° ```bash # 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 / Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ прилоТСния ```bash 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 / Горячий Π΄Π΅ΠΏΠ»ΠΎΠΉ ```bash # Enable auto-deployment in server.xml / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ΄Π΅ΠΏΠ»ΠΎΠΉ Π² server.xml # # Simply copy new WAR, Tomcat will redeploy automatically # ΠŸΡ€ΠΎΡΡ‚ΠΎ скопируй Π½ΠΎΠ²Ρ‹ΠΉ WAR, Tomcat Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅Ρ‚ автоматичСски ``` --- ## Configuration Files ### server.xml / Основной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» `/etc/tomcat9/server.xml` ```xml ``` ### tomcat-users.xml / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈ Ρ€ΠΎΠ»ΠΈ `/etc/tomcat9/tomcat-users.xml` ```xml ``` ### context.xml / ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ контСкста `/etc/tomcat9/context.xml` or `META-INF/context.xml` ```xml ``` ### web.xml / ДСскриптор Π²Π΅Π±-прилоТСния `/etc/tomcat9/web.xml` or `WEB-INF/web.xml` ```xml 30 ``` --- ## JVM Tuning ### Set JVM Options / Настройка JVM ```bash # 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 ```bash # 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 / Настройки для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ```bash 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 ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ ```xml ``` ### HTTPS Connector (SSL/TLS) / HTTPS ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ ```xml ``` ### AJP Connector (Apache mod_jk) / AJP ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ ```xml ``` ### Behind Reverse Proxy / Π—Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ прокси ```xml ``` --- ## Security ### Manager Application Security / Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Manager ```bash # Restrict Manager access to localhost / ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Manager локалхостом # Edit /var/lib/tomcat9/webapps/manager/META-INF/context.xml # Allow specific IPs / Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ IP ``` ### SSL/TLS Configuration / ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ SSL/TLS ```bash # 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 / Π£Π΄Π°Π»ΠΈΡ‚ΡŒ прилоТСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ```bash # 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 / Π€Π°ΠΉΠ»Ρ‹ Π»ΠΎΠ³ΠΎΠ² ```bash # Debian/Ubuntu sudo tail -f /var/log/tomcat9/catalina.out # Main log / Основной Π»ΠΎΠ³ sudo tail -f /var/log/tomcat9/catalina..log # Daily log / Π”Π½Π΅Π²Π½ΠΎΠΉ Π»ΠΎΠ³ sudo tail -f /var/log/tomcat9/localhost..log # Localhost log / Π›ΠΎΠ³ localhost sudo tail -f /var/log/tomcat9/manager..log # Manager log / Π›ΠΎΠ³ Manager sudo tail -f /var/log/tomcat9/host-manager..log # Host Manager log # Manual installation sudo tail -f /opt/tomcat/logs/catalina.out ``` ### Enable Access Logs / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈ доступа ```xml ``` ### JMX Monitoring / ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ JMX ```bash # 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 :9999 ``` ### Application Monitoring / ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ```bash # Access Manager GUI / Доступ ΠΊ Manager GUI http://localhost:8080/manager/html # Login with user from tomcat-users.xml # Π’Ρ…ΠΎΠ΄ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ· tomcat-users.xml ``` --- ## Troubleshooting & Tools ### Common Issues / ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ```bash # 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 / Π”Π°ΠΌΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ```bash # Get PID / ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ PID ps aux | grep tomcat # Generate thread dump / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΌΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² sudo kill -3 # Output to catalina.out sudo jstack > thread_dump.txt # Save to file / Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ``` ### Heap Dump / Π”Π°ΠΌΠΏ ΠΊΡƒΡ‡ΠΈ ```bash # Generate heap dump / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΌΠΏ ΠΊΡƒΡ‡ΠΈ sudo jmap -dump:format=b,file=/tmp/heap.bin # Analyze with tools like Eclipse MAT or VisualVM # Анализ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Eclipse MAT ΠΈΠ»ΠΈ VisualVM ``` ### Check Configuration / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ```bash # 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 / Π Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ```bash # 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 / Настройка ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ```bash # 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 / Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сТатиС ``` --- ## Quick Reference / ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ справка ### Essential Commands / ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ```bash 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 `-Xms` and `-Xmx` for 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` ```conf /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 `copytruncate` for Tomcat logs as the JVM keeps file handles open. > Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `copytruncate` для Π»ΠΎΠ³ΠΎΠ² Tomcat, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ JVM Π΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ. ---