Tomcat在Linux中的故障排查技巧
Tomcat的日志文件是故障排查的核心依據,其中logs/catalina.out
記錄了啟動、運行及關閉過程的詳細信息。當出現故障時,使用tail -f catalina.out
實時查看日志輸出,或通過grep
命令過濾關鍵錯誤(如grep "ERROR" catalina.out
),可快速定位問題根源(如類加載失敗、端口沖突、配置錯誤等)。
Tomcat默認使用8080端口(HTTP)、8005端口(SHUTDOWN)、8009端口(AJP),若這些端口被其他進程占用,會導致Tomcat無法啟動。使用以下命令檢查端口占用情況:
sudo netstat -tuln | grep <端口號> # 如8080
或
sudo lsof -i:<端口號>
若端口被占用,可通過修改conf/server.xml
文件中的<Connector>
標簽端口(如將port="8080"
改為port="8081"
),或停止占用端口的進程(kill -9 <PID>
)解決。
Tomcat依賴Java運行時環境(JRE/JDK),需確保以下配置正確:
java -version
確認安裝的Java版本符合Tomcat要求(如Tomcat 10需Java 11及以上);catalina.sh
(bin
目錄下),在開頭添加export JAVA_HOME=/path/to/jdk
(如/usr/lib/jvm/java-11-openjdk-amd64
);JRE_HOME
,指向JDK的jre
目錄(如export JRE_HOME=$JAVA_HOME/jre
)。Tomcat的關鍵配置文件(server.xml
、context.xml
、web.xml
)若有語法錯誤或路徑配置不當,會導致啟動失?。?/p>
xmllint --noout conf/server.xml
驗證server.xml
的XML語法;server.xml
中的docBase
(應用部署目錄)、Context
路徑等配置指向正確的目錄,且目錄存在。內存不足是Tomcat常見的故障原因,表現為OutOfMemoryError
(如Java heap space
、PermGen space
)。解決方法:
catalina.sh
:在文件開頭添加JVM內存參數,如:export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m" # Java 8及之前
或(Java 8之后,用Metaspace替代永久代):export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
jconsole
、jvisualvm
或top
命令監控內存占用,根據實際情況調整-Xms
(初始堆)和-Xmx
(最大堆)的值。Tomcat需要對運行目錄、日志目錄及Web應用目錄有讀寫權限,否則會導致啟動失敗。常用命令:
sudo chown -R tomcat:tomcat /path/to/tomcat # 將Tomcat目錄所有者設為tomcat用戶
sudo chmod -R 755 /path/to/tomcat # 設置目錄權限為755(所有者可讀寫執行,其他用戶可讀執行)
sudo chmod +x /path/to/tomcat/bin/*.sh # 賦予啟動腳本執行權限
其中tomcat
為運行Tomcat的系統用戶(需提前創建)。
若Tomcat以系統服務方式運行(如systemd
),需檢查服務狀態:
sudo systemctl status tomcat # 查看服務狀態
sudo systemctl start tomcat # 啟動服務
sudo systemctl restart tomcat # 重啟服務
若服務未注冊,可將Tomcat添加為系統服務(參考systemctl
文檔)。
系統資源不足(如內存、CPU、磁盤空間)會導致Tomcat無法啟動或運行緩慢:
free -m
查看內存使用情況,top
查看CPU占用;df -h
查看磁盤剩余空間,確保/
分區有足夠空間(建議至少10%空閑);swap
)大小。