Iptables

埠突然關閉。如何重新打開?

  • February 8, 2015

我用 PHP 編寫了一個軟體模組,用於管理不同數據儲存(MySQL、ElasticSearch 和 Redis)中數據的保存。為了測試這個模組,我在 Apache JMeter 中創建了幾個測試計劃,包括一些發出大量並發請求的測試計劃。測試是針對 Ubuntu 14.04 LTS VM(Vagrant box)中的 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

問題

到目前為止,我一直等到商店再次打開或重新啟動 VM。但是,這非常不方便,這導致我提出實際問題:

是否有重新打開關閉埠的命令?

我已經搜尋過,但只找到了有關如何配置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

我認為這個偵聽埠 9200 的 java 應用程序剛剛崩潰,您需要重新啟動它。

netstat -nlpt | grep 9200中,您可以獲取程序 ID(就在最後 /java 旁邊)。

然後使用該 id,執行:ps aux | grep [process id]找出 java 應用程序是什麼,如果您現在還沒有,然後重新啟動它,這應該可以解決您的問題!

引用自:https://serverfault.com/questions/666004