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