一、問題場景
在Windows
上運維服務過程中,經常會遇到運行服務,部署安裝時候無任何問題,后續再某個特殊時間點,突然服務無法啟動了。再次啟動時,提示端口占用與以一種訪問權限不允許的方式做了一個訪問套接字的嘗試
。
出現這種問題,常見有兩種可能:
1)端口已被其他進程占用
服務啟動時,需要綁定監聽的TCP/UDP
對應端口,已經被其他進程以同種TCP/UDP
協議占用(一個端口不能被多個獨立進程以同種協議占用)。
2)Winnat
服務不讓用
端口并未被其他進程以同種TCP/UDP
協議占用,只是當前端口被winnat
服務作為排除端口,添加到了TCP/UDP
協議列表范圍內(服務不讓這個端口以TCP/UDP
被程序使用)
二、解決方案
端口已被其他進程使占用。
1)可以直接嘗試服務監聽換端口。
2)以管理員權限,運行cmd
控制窗口,執行netstat
命令找到對應進程,確定結束進程不會影響系統正常運行后,結束進程,目標服務再次嘗試運行。
>netstat -ano|findstr "[端口號]"
這里以3360
端口為例,實際服務為mysql
服務。
>netstat -ano|findstr "3360"TCP 0.0.0.0:3360 0.0.0.0:0 LISTENING 21316TCP [::]:3360 [::]:0 LISTENING 21316
使用命令行殺死進程。
>taskkill /f /t /im 21316
成功: 已終止 PID 26184 (屬于 PID 21316 子進程)的進程。
成功: 已終止 PID 21316 (屬于 PID 13440 子進程)的進程。
再次查看端口是否存在,并存在則標識進程殺死成功。
>netstat -ano|findstr "3360"
>
Winnat
服務不讓用
1)以管理員權限,運行cmd
控制窗口,執行winnat
端口排除清單查看命令。
使用網絡命令netsh interface ipv4 show excludedportrange protocol=tcp
。查看TCP
協議排除的范圍端口。
>netsh interface ipv4 show excludedportrange protocol=tcp
協議 tcp 端口排除范圍
開始端口 結束端口
---------- --------1738 18371838 19371963 20622063 21622223 23222323 24222423 2522
如果不幸命中,在范圍內,那么就重新停止后再啟動winnat
服務。
>net stop winnat
Windows NAT Driver 服務已成功停止。
>net start winnat
Windows NAT Driver 服務已經啟動成功。
再次查看服務端口范圍,可以通過這樣的方式啟動服務與端口,如果還不行,就嘗試換服務端口,換到winnat
排除范圍之外。
>netsh interface ipv4 show excludedportrange protocol=tcp
協議 tcp 端口排除范圍
開始端口 結束端口
---------- --------50000 50059 *
* - 管理的端口排除。