我如何关闭似乎被 Xvfb 孤立的端口?

我如何关闭似乎被 Xvfb 孤立的端口?

我在 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,现在一切似乎都很好。

这并没有真正回答如何释放开放端口的问题,但我认为,对于这个内核问题,如果不重新启动,就不可能释放该端口。

相关内容