80 通訊埠 被佔用(Port 80 required is already in use)解決辦法

port 80作為網站預設的port因此大部份的環境都不會檔80 port。這意味著有一些程式會因為這個便利因此使用80 port。 當在開發Java EE 網站的時候,我們通常會使用Tomcat作為Servlet的Container。最討厭的是,當你啟動Tomcat做測試的時候,出現了

Port 80 required by Tomcat v7.0 Server at localhost is already in use....
在這一篇裡面,我會介紹,當遇到這種問題的時候,有什麼解決辦法。

 

前言

port 80作為網站預設的port因此大部份的環境都不會檔80 port。這意味著有一些程式會因為這個便利因此使用80 port。 當在開發Java EE 網站的時候,我們通常會使用Tomcat作為Servlet的Container。最討厭的是,當你啟動Tomcat做測試的時候,出現了

Port 80 required by Tomcat v7.0 Server at localhost is already in use....
921e271b-6fed-41fe-a98b-7b5b30b8e4c8

在這一篇裡面,我會介紹,當遇到這種問題的時候,有什麼解決辦法。

解決流程

基本上當遇到這種問題的時候,說明文字還蠻清楚,那就是某一個process早已經佔用了我們要使用的port,因此我們處理流程就是:

  1. 找出是哪一個process佔用了我們的port
  2. 關掉/修改process所使用的port

找出是哪一個process佔用了我們的port

基本流程:

  1. 找出佔用port的process id
  2. 透過taskmgr.exe(工作管理員) 找出process id 對應的 process

1 透過netstat找出佔用port的process id

我們可以透過netstat來看那些process佔用了我們要的port,我們可以在cmd裡面輸入:


netstat -ano | findstr 0.0:80

上面的指令就是使用netstat列出我們所有process所listen的port,然後在透過findstr找出所有port號是80的。

以下面截圖為例,我們有一個process id 是 4 號的,目前正listen port 80:

cb70f18789165220a2edda6095ab8548
透過netstat看那些process 佔用port 80

2 透過taskmgr.exe(工作管理員)找出process

首先我們開啟taskmgr.exe:

79dc413122ac31c737f9ca6252368acb
開啟taskmgr.exe並且以pid欄位做排序

2-1 「題外話」 顯示PID欄位

假設你的taskmgr.exe沒有顯示pid欄位,那麼在「檢視(View)" -> "選取欄位(Select Columns..)" -> 勾選 "PID (Process Identifier)"

dc77c897-c823-417f-9464-fb659d227742 90830a83-6324-4ca8-89d2-c2e0c1151c2e
顯示PID欄位

以上面netstat找到的例子來說,我們要找的process id 是4號,不過從上面截圖可以看出process id 並沒有4。這個時候我們會需要選取「顯示來自所有使用者的處理程序」:

c8476c1f8e7810dbe10c8dbdb832becc顯示所有使用者的處理程序

找到process id 是4號的程式描述是「NT Kernel & System」。看到這個相信大家還是不知道這個是什麼Orz,沒關係下一部份將會介紹。

關掉/修改process的port

上一段介紹了如何查到哪一個process佔用了我們的port,這一階段介紹幾個比較常見會佔用port 80 的process。

Skype

首先process id 4和skype沒有關係,不過skype作為大部份電腦都會安裝的軟體,因此從skype開始說。

我第一個遇到佔用80 port的就是skype。很難想像skype為什麼會需要用到port 80,不過看了設定的說明,可能是想要利用port 80 在大部份環境下面都不會被擋住的特性,因此預設會透過port 80和443來傳輸資料。

我們可以再「設定」->「連線」把「以80 和 443 port為替代連入連線」勾掉:

27860049-3ae6-4bcc-b5ed-ed82891bc0db

process id 4 "NT Kernel & System"

其實process id 4有可能是以下幾種服務導致的:

  1. IIS
  2. SQL Server Reporting services
  3. Web Deployment Agent Service
  4. World Wide Web Publishing service

IIS

iis作為一個web serverice當然會佔用port 80,因此我們需要看我們os是否開啟了iis服務。

在Windows 7以上的OS都可以選擇是否要開啟iis服務。預設是關閉的。

我們可以開啟「新增刪除程式(Uninstall or change a program)」-> 「開啟關閉Windows 功能(Turn Windows features on and off)」(這邊中文名稱是我自己翻的,因為os是英文所以不確定正確的中文翻譯),然後看iis是否有開啟:

670aab51-89bc-4fe4-bea1-82b89c1f33b8
這邊可以看到IIS有被開啟了

這個時候,我們要不是把iis勾掉,要不然就是把iis相關的service就okay了。

SQL Server Reporting services

在Server環境下面最長看到的一個就是sql server的reporting service佔用了port 80。

我們可以從service.msc(服務管理員)裡面找到這個服務停掉它來釋放port 80,不過如果還想要使用Sql server reporting,我們就需要修改預設使用的port。

在這裡我會介紹如何修改sql reporting service預設使用的port:

 

ddf0aed4acef96614c68d123f2c5edf2
開啟Reporting service的組態管理員

 

 

7ec39784b8b4625d83f7acaae4286401
找到「Web 服務 URL」->「TCP通訊埠」然後把他從80改成可以用的port

 

 

45d71d90bfcc2dbd78eeacb63cad83c6 
然後找到「報表管理員URL」->「進階」然後把port改成和上面修改的port號一致

 

Web Deployment Agent Service

8001812
在service.msc(服務管理員)關掉web Deployment Agent Service
這邊有一個需要注意的是,要用service.msc(服務管理員)來找,而不要用taskmgr(工作管理員)來查找,從上圖就可以看出右邊是用taskmgr而左邊使用service.msc, 然後左邊有顯示但是右邊沒有。

總結

上面提到了一些常見佔用port 80的service。通常來說我們可以在服務的設定裡面修改使用的port,或者以直接停用service的方式達到取回我們的port 80。

不過如果真的找不到佔用的service,那麼就只能修改我們的Tomcat 使用 port。

點部落 的標籤: ,

Google+

創用 CC 授權條款
Alan Tsai 的隨手筆記Alan Tsai製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。