Iptables
埠突然關閉。如何重新打開?
我用 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 應用程序是什麼,如果您現在還沒有,然後重新啟動它,這應該可以解決您的問題!