Я запускаю 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.