在我們開發web程序的時候,常常需要指定端口進行測試,但是在Windows下面,我們常常會遇到端口占用的相關問題,下面將展示端口占用的一些解決方法
1. 常規解決方案
a 查詢端口
$ netstat -aon|findstr "8080" # 這裏的8080即要查詢的端口號
# 結果如下
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 19024
TCP 127.0.0.1:2736 127.0.0.1:8080 ESTABLISHED 8960
TCP 127.0.0.1:8080 127.0.0.1:2736 ESTABLISHED 19024
b 查詢進程
$ tasklist|findstr "19024" # 這裏的19024即進程號,根據a查到
# 結果如下
node.exe 19024 Console 1 267,456 K
c 關閉進程
$ taskkill /T /F /PID 19024 # 這裏的19024爲PID,根據b查到
# 結果如下
成功: 已終止 PID 19024 (屬於 PID 14464 子進程)的進程
2. 查找不到對應端口號
有些時候,我們使用netstat
命令找不到對應端口占用的程序,這時因爲這時候這些端口被用作了windows自己的保留端口。
每次開機,windows就會隨機保留一些端口,原因如下
- 因爲發現病毒活動而被微軟屏蔽
- 安裝過windows update以後,保留的端口發生變化
- 開啓了
Hyper-V
特性 - ....
由於這些端口被保留,所以即使沒有任何程序在使用,用戶自己創建的程序也無法使用這些端口(爲什麼你的梯子常常提示提示端口占用,這就是原因)。
這些保留端口有一部分經常是8000及50000端口附近,所以經常會影響web開發,因爲對於web來說,8080是一個常用的端口。
解決方法如下
a 重啓電腦,直到需要的端口不在保留端口中
b 徹底解決
(1) 查看保留端口
通常上一步無法解決端口占用問題的話,這一步裏面,需要的端口會在保留端口中,這裏*
標註的代表這些範圍內的端口不會被作爲保留端口使用
$ netsh interface ipv4 show excludedportrange protocol=tcp
# 結果如下
協議 tcp 端口排除範圍
開始端口 結束端口
---------- --------
1095 1194
1195 1294
1295 1394
1395 1494
1495 1594
2180 2279
2280 2379
2380 2479
2480 2579
2580 2679
3000 3000 *
3033 3132
3133 3232
8028 8028
8080 8080 *
8996 8996
10157 10256
10257 10356
10357 10456
10457 10556
10557 10656
10657 10756
50000 50059 *
55500 55599 *
* - 管理的端口排除。
(2) 排除端口
$ netsh int ipv4 add excludedportrange protocol=tcp startport=8081 numberofports=10
# 這裏8081爲開始的端口,10的意思爲8081-8090這些端口全都要移出保留端口,如果只想8081不作爲端口,那麼10可以改成1
$ netsh interface ipv4 show excludedportrange protocol=tcp
# 再次查詢,結果如下
開始端口 結束端口
---------- --------
1095 1194
1195 1294
1295 1394
1395 1494
1495 1594
2180 2279
2280 2379
2380 2479
2480 2579
2580 2679
3000 3000 *
3033 3132
3133 3232
8028 8028
8080 8080 *
8081 8090 *
8996 8996
10157 10256
10257 10356
10357 10456
10457 10556
10557 10656
10657 10756
50000 50059 *
55500 55599 *
3. IDEA無法啓動
有時候,打開了IDEA,但是IDEA一直處於加載狀態,始終進不去。
其實如果查看報錯的日誌的話,會看到與端口相關的報錯提示,比如bindException
關鍵詞,這也和windows保留端口有關係,這時候可以按照以下步驟操作
$ net stop winnat
Windows NAT Driver 服務已成功停止。
$ net start winnat
重啓NAT服務,這時候重新打開IDEA,就可以正常啓動了。
此外也可以參考步驟2,排除端口,這裏的端口範圍可以去IDEA官網查詢
備註
1. 添加保留端口
上面的方法主要是如何排除保留端口,如果想要添加保留端口,讓應用程序無法使用這些端口,可以參考微軟官方的做法
2.Hyper
啓用和禁用命令
# 禁用
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All
# 啓用
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All