无法 ping 通 Localhost,因此无法关闭 Tomcat

无法 ping 通 Localhost,因此无法关闭 Tomcat

我使用 tar-ball 通过 wget 安装了 Tomcat 6。服务器启动正常,但关闭时出现超时异常。

root@88:/usr/local/tomcat/logs# /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar
30-Mar-2010 17:33:41 org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop: 
java.net.ConnectException: Connection timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    ...

我读到这可能是因为我的防火墙阻止了关闭端口 (8005) 上的传入连接。我在 VPS 上运行默认的 Ubuntu 9.04 安装,并且我的 iptables 中没有规则。我如何知道该端口是否被阻止?我如何检查服务器是否正在侦听 8005 上的连接?

奇怪的是,从服务器本身 ping 本地主机或我的服务器的 IP 失败,而从另一台机器 ping 我的服务器的 IP 却成功。

--------编辑--------(回复戴维)

感谢您的所有提示和建议!

网络状态-nlp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      9611/java       
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      28505/mysqld    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      9611/java       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      

...

所以我们可以看到 tomcat 正在监听,但我似乎无法联系到它。

root@88:/usr/local/tomcat# telnet localhost 8005
Trying 127.0.0.1...

尝试远程登录到端口无限期挂起。我的 iptables 中没有规则,所以我不认为这是防火墙的问题。

root@88:/usr/local/tomcat# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

这是 /etc/hosts 的内容

127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
88.198.31.14 88.198.31.14  88 88

但我仍然无法 ping 通本地主机...我是否需要检查环回设备是否正确启用或做其他事情?(如果您回答是,我不确定该怎么做:))。

root@88:/usr/local/tomcat# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.

--- localhost ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 5999ms

尝试找出环回配置为何;

root@88:~# ifconfig lo
lo        Link encap:Local Loopback  
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

感谢 DAVEY 提供的解决方案

我需要调出界面(不确定为什么它没有运行)。ifconfig lo up成功了。

root@88:~# ifconfig lo up
root@88:~# ifconfig lo
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@88:~# ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.025 ms

再次感谢,

加夫

答案1

该命令netstat -nlp将显示正在监听的内容:

]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address       Foreign Address    State       PID/Program name   
tcp        0      0 127.0.0.1:8005      0.0.0.0:*          LISTEN      13940/java          
tcp        0      0 0.0.0.0:8009        0.0.0.0:*          LISTEN      13940/java          
tcp        0      0 0.0.0.0:8080        0.0.0.0:*          LISTEN      13940/java          
tcp        0      0 0.0.0.0:22          0.0.0.0:*          LISTEN      3377/sshd   

lsoftomcat 进程的 pid 上的命令将显示类似的内容:

java    13940 root   35r   CHR    1,9              942 /dev/urandom
java    13940 root   36r   CHR    1,9              942 /dev/urandom
java    13940 root   38u  IPv4  31050              TCP *:8009 (LISTEN)
java    13940 root   39u  IPv4  31053              TCP 127.0.0.1:8005 (LISTEN)

当你运行时,shutdown.sh你应该看到流量流向端口 8005:

[root@test001 ~]# tcpdump -i lo 'port 8005'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
20:11:22.168395 IP test001.36696 > test001.8005: S 2859727005:2859727005(0) win 32792 <mss 16396,sackOK,timestamp 20428874 0,nop,wscale 7>
20:11:22.168922 IP test001.8005 > test001.36696: S 2855491174:2855491174(0) ack 2859727006 win 32768 <mss 16396,sackOK,timestamp 20428874 20428874,nop,wscale 7>
20:11:22.168598 IP test001.36696 > test001.8005: . ack 1 win 257 <nop,nop,timestamp 20428874 20428874>
20:11:22.171127 IP test001.36696 > test001.8005: P 1:2(1) ack 1 win 257 <nop,nop,timestamp 20428877 20428874>
20:11:22.171144 IP test001.8005 > test001.36696: . ack 2 win 256 <nop,nop,timestamp 20428877 20428877>
20:11:22.171443 IP test001.36696 > test001.8005: P 2:3(1) ack 1 win 257 <nop,nop,timestamp 20428877 20428877>
20:11:22.171453 IP test001.8005 > test001.36696: . ack 3 win 256 <nop,nop,timestamp 20428877 20428877>
20:11:22.171686 IP test001.36696 > test001.8005: P 3:4(1) ack 1 win 257 
  1. 检查是否localhost解析,例如它是否在 /etc/hosts 中。
  2. 检查您是否没有运行 Ubuntu 防火墙。
  3. netstat -nlp如果可以的话,发布你的输出。
  4. 尝试telnet localhost 8005telnet 127.0.0.1

相关内容