我已经用PHP编写了一个软件模块,用于pipe理不同数据存储(MySQL,ElasticSearch和Redis)中数据的保存。 为了testing这个模块,我在Apache JMeter中创build了一些testing计划,其中包括一些并发请求。 这些testing是在Ubuntu 14.04 LTS虚拟机(Vagrant盒)中的LAMP堆栈上运行的。
我所观察到的是,有时在端口9200(ElasticSearch)在给定数量的请求之后closures。 这很好,因为我想testing其中一个数据存储变得不可用的场景。 但是,为了validationtesting结果,我需要再次打开端口。
ElasticSearch仍在运行并正在侦听端口。
testing运行前的情况
$ 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
题
到目前为止,我一直等到商店再次开放,或者我重新启动了虚拟机。 然而,这是非常不方便的,这导致了我的实际问题:
有没有命令重新开放一个封闭的港口?
我search了,但只发现如何configurationiptables 。 我试过了
$ 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
我认为这个监听端口9200的Java应用程序刚刚崩溃,你需要重新启动它。
从netstat -nlpt | grep 9200 netstat -nlpt | grep 9200 ,你可以得到进程ID(最后在/ java旁边)。
然后用这个ID,运行: ps aux | grep [process id] ps aux | grep [process id]找出什么是Java应用程序,如果你现在还没有,只是重新启动它,应该解决你的问题!