1. 程式人生 > >Linux部署Tomcat無法訪問

Linux部署Tomcat無法訪問

前言

環境: RedHat7.0 Tomcat7JDK7
安裝配置成功之後,啟動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