Linux部署Tomcat無法訪問
前言
環境: RedHat7.0
, Tomcat7
, JDK7
安裝配置成功之後,啟動tomcat服務, 然後使用本地瀏覽器訪問http://xx:xx:xx:xx:8080, 無法訪問。
解決過程
首先懷疑是配置問題,終端輸出:
echo $JAVA_HOME
echo $TOMCAT_HOME
一切正常,排除
然後懷疑是防火牆問題:
RHEL7 中使用了firewalld
代替了原來的iptables
,操作設定和原來有點不同:
檢視防火牆狀態: systemctl status firewalld 或者 systemctl is-active firewalld
啟動防火牆: systemctl start firewalld
停止防火牆: systemctl stop firewalld
永久停用: systemctl disable firewalld
啟用防火牆: systemctl enable firewalld
我選擇關閉防火牆,然後重啟tomcat服務,再次訪問,發現還是不行。
其次懷疑是埠被佔用:
修改tomcat/conf/server.xml,將8080埠號改為8090,重啟服務,發現可以正常訪問。
**那麼**8080埠號被誰佔用了呢?
使用netstat –apn | grep 8080
,檢視所有的程序和埠使用情況。發現下面的程序列表,其中最後一欄是PID/Program name 。
oracle 22725 oracle9i 3u IPv4 18621468 TCP RHEL3:6800 (LISTEN)
oracle 22725 oracle9i 4u IPv4 18621469 TCP RHEL3:6800->RHEL3:2174 (CLOSE_WAIT)
oracle 22725 oracle9i 8u IPv4 18621568 TCP RHEL3:6800->RHEL3:2175 (CLOSE_WAIT)
oracle 22725 oracle9i 9u IPv4 18621578 TCP RHEL3:6800->RHEL3:2176 (CLOSE_WAIT)
oracle 22726 oracle9i 3u IPv4 18621468 TCP RHEL3:6800 (LISTEN)
oracle 22726 oracle9i 4u IPv4 18621469 TCP RHEL3:6800->RHEL3:2174 (CLOSE_WAIT)
oracle 22726 oracle9i 8u IPv4 18621568 TCP RHEL3:6800->RHEL3:2175 (CLOSE_WAIT)
oracle 22726 oracle9i 9u IPv4 18621578 TCP RHEL3:6800->RHEL3:2176 (CLOSE_WAIT)
close_wait說明伺服器被動斷開連線,但斷開的4次握手未進行完全
然後使用kill -9 PID
將程序殺死, 問題解決。
其中, 我使用shutdown命令將機器關閉了,tomcat服務被動斷開連線,導致出現close_wait這個狀態,現在程式關閉之後原來所用埠依然被佔用, 解決方法:
1) 優化伺服器核心引數(/etc/sysctl.conf)
2) 做定時任務檢查httpd程序數目,一旦發現httpd程序數目異常,就重啟apache和tomcat, 建議在非工作時間進行檢查重啟,檢查指令碼:
#!/bin/sh
httpcount=`ps -ef|grep httpd|wc -l `
echo $httpcount
if [ $httpcount -gt 900 ]; then
killall httpd
killall java
/cicro/wcm/bin/startas.sh
echo "Restart successfully because of much useless process."
else
echo "It is OK!"
fi