我在 FC8 Amazon EC2 映像上运行 Xvfb。有时 Xvfb 会崩溃(目前无法找出崩溃的原因),崩溃后 TCP 端口会显示为孤立端口。我无法获取 PID 来终止可能正在使用它的任何进程。
我正在使用以下方式启动 Xvfb:
Xvfb :7 -screen 0 1024x768x24 &
下面是我正在使用的示例,Xvfb 端口是(曾经是)6007:
# netstat -ap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh *:* LISTEN 1894/sshd
tcp 0 0 *:6007 *:* LISTEN -
tcp 0 352 ip-10-84-69-165.ec2.int:ssh c-71-194-253-238.hsd1:51689 ESTABLISHED 2981/0
udp 0 0 *:bootpc *:* 1817/dhclient
udp 0 0 *:bootpc *:* 1463/dhclient
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ] DGRAM 871 668/udevd @/org/kernel/udev/udevd
unix 2 [ ACC ] STREAM LISTENING 5385 1880/dbus-daemon /var/run/dbus/system_bus_socket
unix 6 [ ] DGRAM 5353 1867/rsyslogd /dev/log
unix 2 [ ] DGRAM 11861 2981/0
unix 2 [ ] DGRAM 5461 1974/crond
unix 2 [ ] DGRAM 5451 1904/console-kit-da
unix 3 [ ] STREAM CONNECTED 5438 1880/dbus-daemon /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 5437 1904/console-kit-da
unix 3 [ ] STREAM CONNECTED 5396 1880/dbus-daemon
unix 3 [ ] STREAM CONNECTED 5395 1880/dbus-daemon
unix 2 [ ] DGRAM 5361 1871/rklogd
# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
dhclient 1463 root 3u IPv4 4704 UDP *:bootpc
dhclient 1817 root 4u IPv4 5173 UDP *:bootpc
sshd 1894 root 3u IPv4 5414 TCP *:ssh (LISTEN)
sshd 2981 root 3u IPv4 11825 TCP ip-10-84-69-165.ec2.internal:ssh->c-71-194-253-238.hsd1.il.comcast.net:51689 (ESTABLISHED)
尝试使用 iptables 强制关闭端口似乎也不起作用。
iptables -A INPUT -p tcp --dport 6007 -j DROP
我不知道如何回收/释放端口。据我所知,这个端口将保持这种状态,直到 EC2 实例关闭。
那么,我该如何关闭这个端口以便重新启动 Xvfb?
答案1
fuser -kn tcp 6007
以 root 身份运行应该会终止打开端口 6007 的所有进程。
答案2
我对 Xvfb 失败的原因进行了进一步调查,发现服务器上的几个不同进程都出现了内核恐慌。
Unable to handle kernel paging request at virtual address
当 Xvfb 上发生此内核恐慌时,我们会发现问题中描述的情况,其中内核已打开端口,我们只能通过重新启动机器来释放。
当我调查内核恐慌时,我偶然发现了这个链接:
http://drija.com/linux/72417/network-port-open-but-no-process-attached/
事实证明,我们使用的内核(2.6.16-xenU)现在在 Amazon EC2 实例上不稳定:
http://www.vincestross.com/2009/04/upgrade-an-ec2-instance/
我将我们使用的内核更改为 2.6.21.7-2.fc8xen-ec2-v1.0,现在一切似乎都很好。
这并没有真正回答如何释放开放端口的问题,但我认为,对于这个内核问题,如果不重新启动,就不可能释放该端口。