這裡分享乙個案例,問題的原因是反向**使用不當。
首先描述一下問題的現象。當時的問題是應用啟動失敗,日誌裡面報錯顯示埠占用。我們的應用都是通過指令碼發布的,之前發布過多次都沒有出現過問題。那麼同樣的指令碼、同樣的機器,這次怎麼就發布失敗了呢?
報錯資訊如下:
oserror: [errno 48] address already in use這個報錯是很常見的,以為是發布的過程中上乙個應用沒有正常關閉。然後熟練的開啟終端,連線到伺服器,通過netstat -ant|grep listen命令檢查這個埠被誰占用了。這條命令的輸出如下:
tcp 0 0 0.0.0.0:53130 0.0.0.0:* listen我們的服務使用8080埠。於是熟練的在輸出的內容裡尋找8080。可是並沒有找到!tcp 0 0 0.0.0.0:39308 0.0.0.0:* listen
tcp 0 0 0.0.0.0:111 0.0.0.0:* listen
tcp 0 0 0.0.0.0:22 0.0.0.0:* listen
tcp 0 0 0.0.0.0:46429 0.0.0.0:* listen
tcp 0 0 0.0.0.0:2049 0.0.0.0:* listen
tcp 0 0 0.0.0.0:51329 0.0.0.0:* listen
tcp6 0 0 0.0.0.0:2280 :::* listen
看來這次情況跟以往不太一樣了。怎麼會這樣呢?既然沒有埠占用,為什麼應用會起不來?於是我再次嘗試啟動應用,還是報了相同的錯誤。
既然這樣,那麼我直接搜尋8080試試,於是輸入了下面的命令:
netstat -ant | grep 8080很快,得到了下面的結果:
tcp 0 0 192.168.6.55:59580 192.168.6.55:8080 time_wait居然出現了time_wait。在我的三觀裡time_wait只會出現在斷開連線的時候啊,監聽埠是不會出現time_wait的。這是要打破三觀的節奏嗎?
真相只有乙個。我讓運維借用sudo許可權看看這個連線是哪個程序的。最後發現這個埠是被nginx占用的。原來,nginx接收了很多請求,進行**的時候發起tcp連線,這時會占用乙個未被使用的隨機埠。而後端應用和nginx部署在同一臺機器,由於請求過多,nginx發起了大量連線,每個連線都是短連線,占用了大量的隨機埠,並且需要經過30秒的time_wait狀態才能釋放占用。碰巧把後端應用的8080埠也占用了,導致應用無法啟動。
不要把nginx和後端應用部署在同一臺機器。會有一定機率導致後端應用的埠被占用。
啟用nginx報錯80埠被占用
c windows system32 sc config http start disabled進入 服務 裡面找到world wide web publishing service,選擇 禁用 重啟電腦以後啟動nginx,這次成功了,但是我在任務管理器中任然能看到system這個程式在跑,他並沒有...
啟用nginx報錯80埠被占用
最近在本機跑nginx,啟動後報錯,懷疑80埠被占用 netstat ano findstr 0.0.0.0 80嘗試一 檢視後發現埠被乙個system pid 為4的乙個程式占用。我在資源管理器中嘗試將system結束掉,然後就藍屏了.後續我使用http localhost訪問後,發現跳轉到了ii...
nginx提示位址或埠被占用
今天小編在啟動nginx 的時候遇到如下的錯誤 starting nginx nginx emerg bind to 0.0.0.0 80 failed 98 address already use 這個就是nginx 的80 埠被占用了 我們時常在nginx啟動或者關閉關閉過多的情況下出現的 1 ...