我們常常會遇到Windows系統服務器應用使用的端口被異常占用導致服務啟動失敗,例如:Windows上安裝的Tomcat無法啟動,TCP 80端口已經被其它應用占用。這通常是應用程序需要使用的TCP/UDP端口被其它程序、或者病毒木馬占用。
排查方法
使用netstat -ano命令可以找出占用端口的進程ID,而后使用tasklist /svc命令找出對應的進程。
如下給出一例安裝Tomcat后,啟動Tomcat提示端口被占用的處理過程。
1.使用netstat -ano |find “:80” 看到占用端口的進程ID是4,注:請根據實際情況修改端口。
2.使用tasklist /svc| find “4” 看到是系統進程。 注:請根據實際情況修改進程ID。
3.嘗試關閉了IIS ,iisreset /stop 。
4.但是發現80端口仍然被占用。于是使用cURL -I 127.0.0.1 查看返回的server是 microsoft–httpAPI/2.0 而不是Server: microsoft-IIS/7.5 。
能夠使用microsoft–httpAPI/2.0的只能是微軟的產品。檢查是否有安裝sql SERVER ,如果有嘗試關閉sql Server Reporting Service這個服務。
關閉后再使用cURL -I 127.0.0.1 就提示80端口無法連接,說明端口已經被釋放。
注意:如果沒有安裝cURL還可以使用telnet 127.0.0.1 80 執行完,ctrl+c終止就會出現下面圖片的樣子,也可以看到server:microsoft–httpAPI/2.0 ,當然僅靠這個是不能判斷是哪個程序的。只能根據此判斷是微軟的應用占用了。具體還需要看服務器上實際安裝了哪些微軟的應用。