端口突然关闭。如何重新开放?

端口突然关闭。如何重新开放?

我用 PHP 编写了一个软件模块,用于管理不同数据存储(MySQL、ElasticSearch 和 Redis)中的数据保存。为了测试该模块,我在 Apache JMeter 中创建了几个测试计划,其中一些计划会发出大量并发请求。这些测试针对 Ubuntu 14.04 LTS VM(Vagrant 盒)中的 LAMP 堆栈运行。

我观察到,有时端口 9200 (ElasticSearch) 在一定数量的请求后会关闭。这很好,因为我想测试其中一个数据存储不可用的情况。但是,为了验证测试结果,我需要再次打开该端口。

ElasticSearch 仍在运行并监听端口。

试运行前情况

$ nmap -p 9200 localhost
(...)
PORT     STATE SERVICE
9200/tcp open  wap-wsp

$ sudo netstat -tlnp | grep '9200'
tcp6       0      0 :::9200                 :::*                    LISTEN      1057/java

试运行后情况

$ nmap -p 9200 localhost
(...)
PORT     STATE  SERVICE
9200/tcp closed wap-wsp

$ sudo netstat -tlnp | grep '9200'
tcp6       0      0 :::9200                 :::*                    LISTEN      1057/java

问题

到目前为止,我已经等到商店再次开门或重新启动虚拟机。然而,这非常不方便,这引出了我真正的问题:

有没有命令可以重新打开已关闭的端口?

我搜索过,但只找到有关如何配置的建议iptables。我试过

$ sudo iptables -A INPUT -d 0/0 -s 0/0 -p tcp --dport 9200 -j ACCEPT

但据我所知,这只会创建一条规则,并不会对端口产生任何直接影响:

$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9200

$ nmap -p 9200 localhost
(...)
PORT     STATE  SERVICE
9200/tcp closed wap-wsp

答案1

我认为这个监听端口 9200 的 java 应用程序刚刚崩溃,您需要重新启动它。

从中netstat -nlpt | grep 9200,您可以获取进程 ID(就在末尾的 /java 旁边)。

然后使用该 id 运行:ps aux | grep [process id]找出什么是 java 应用程序(如果您还没有),然后重新启动它,这应该可以解决您的问题!

相关内容