Назад | Перейти на главную страницу

Как я могу закрыть порт, который кажется осиротевшим из-за Xvfb?

Я запускаю Xvfb на образе FC8 Amazon EC2. Иногда происходит сбой 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?

Я провел еще несколько исследований, почему 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, и теперь, похоже, все в порядке.

На самом деле это не отвечает на вопрос о том, как освободить открытый порт, но я думаю, что с этой проблемой ядра было невозможно освободить этот порт без перезагрузки.

fuser -kn tcp 6007 Запуск от имени root должен убить любой процесс, у которого открыт порт 6007.