我使用 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
lsof
tomcat 进程的 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
- 检查是否
localhost
解析,例如它是否在 /etc/hosts 中。 - 检查您是否没有运行 Ubuntu 防火墙。
netstat -nlp
如果可以的话,发布你的输出。- 尝试
telnet localhost 8005
或telnet 127.0.0.1