Tomcat在Linux上的故障排查指南
日志是故障排查的核心依據,Tomcat的日志文件(如catalina.out
、localhost.log
)記錄了啟動、運行及關閉過程中的詳細信息。使用以下命令實時查看日志:
tail -f /path/to/tomcat/logs/catalina.out
通過日志中的ERROR或Exception關鍵字(如java.lang.OutOfMemoryError
、Port already in use
),可快速定位問題根源。
Tomcat默認使用8080端口(HTTP)、8005端口(SHUTDOWN)、8009端口(AJP),若端口被其他進程占用,會導致啟動失敗。使用以下命令檢查端口占用:
# Linux系統(推薦lsof)
lsof -i :8080
# 或netstat
netstat -tulnp | grep 8080
若端口被占用,可通過以下方式解決:
kill -9 <PID>
;conf/server.xml
中的<Connector>
標簽(如將port="8080"
改為port="8081"
)。Tomcat依賴JDK運行,需確保以下配置正確:
java -version
若未安裝或版本不符,需下載對應JDK并安裝。~/.bashrc
(Ubuntu/CentOS通用)或/etc/profile
,添加:export JAVA_HOME=/usr/local/jdk/jdk1.8.0_151 # 替換為實際JDK路徑
export PATH=$JAVA_HOME/bin:$PATH
執行source ~/.bashrc
使配置生效。Tomcat的核心配置文件(server.xml
、context.xml
、web.xml
)若存在語法錯誤,會導致啟動失敗??墒褂靡韵鹿ぞ唑炞C:
xmllint
命令(需安裝libxml2-utils
包):xmllint --noout /path/to/tomcat/conf/server.xml
server.xml
中的<Connector>
、<Host>
標簽配置(如端口號、路徑),context.xml
中的資源定義(如數據庫連接池)。Tomcat進程需要對安裝目錄、日志目錄、webapps目錄有讀寫權限。通常將Tomcat目錄歸屬給tomcat
用戶(若未創建,需先創建):
# 創建tomcat用戶組及用戶
sudo groupadd tomcat
sudo useradd -M -s /bin/nologin -g tomcat -d /path/to/tomcat tomcat
# 修改目錄歸屬
sudo chown -R tomcat:tomcat /path/to/tomcat
# 設置目錄權限(755為目錄通用權限,750為webapps目錄權限)
sudo chmod -R 755 /path/to/tomcat
sudo chmod -R 750 /path/to/tomcat/webapps
避免使用root
用戶運行Tomcat,防止安全風險。
系統資源(內存、CPU、文件描述符)不足會導致Tomcat啟動緩慢或崩潰:
free -h
查看內存剩余,若內存不足,調整Tomcat堆內存(編輯bin/catalina.sh
):export JAVA_OPTS="-Xms512m -Xmx1024m" # 初始堆512MB,最大堆1024MB
top
命令查看CPU占用,若CPU過高,可能是應用程序性能問題(如死循環),需優化代碼。/etc/security/limits.conf
):* soft nofile 65536
* hard nofile 65536
執行ulimit -n 65536
使配置立即生效。防火墻或SELinux會阻止外部訪問Tomcat端口,需調整配置:
sudo firewall-cmd --permanent --add-port=8080/tcp # 開放8080端口
sudo firewall-cmd --reload
sudo setenforce 0
若需永久關閉,編輯/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=disabled
。若Tomcat以服務方式運行(如systemd
),需檢查服務狀態:
# 查看Tomcat服務狀態(假設服務名為tomcat)
sudo systemctl status tomcat
# 若未啟動,啟動服務
sudo systemctl start tomcat
# 設置開機自啟
sudo systemctl enable tomcat
若服務啟動失敗,可通過journalctl -xe
查看系統日志,獲取詳細錯誤信息。
若Tomcat運行緩慢,可使用以下工具分析性能:
top
(查看CPU/內存)、vmstat 1
(查看虛擬內存)、iostat 1
(查看磁盤I/O)。bin/catalina.sh
,添加-Dcom.sun.management.jmxremote
參數),使用jconsole
或VisualVM
連接,查看線程、內存、類加載情況。JAVA_OPTS
中添加-Xloggc:/path/to/gc.log -XX:+PrintGCDetails
,使用gclogviewer
工具分析垃圾回收情況,定位內存泄漏。