今天同事反應測試主機 IIS Server 無法使用,進到 QA 主機後發現所有的 IIS 服務都已停止,第一直覺就是到事件檢視器查看是否有異常的 Log 資訊,發現事件檢視器紀錄其中來源 HttpEvent 嫌疑重大,以下就針對解決此問題的方式做說明,若有問題歡迎提出一起討論或是給予指導。
使用 netstat
在 windows 中可以下 netstat 指令查看目前是哪一個 process 在使用指定的 port,使用方式如下
PS D:\> netstat -ano | findstr 0.0:80 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4可以查看到目前 80 port 是被 processID [4] 佔用,接著我們可以在工作管理員找到 PID 的資訊
工作管理員
開啟 task manager ,切換到詳細服務 tab,根據 PID 排序即可看到 PID 為 4 的 process 為何,當時 debug 狀況發現 NGINX 服務佔用 80 port
處理方式也相當簡單,就兩種方式
服務 : 如果是服務(Service),當下立即到 Service 將 NGINX 停止服務;
執行 : 如果是某個執行檔,可以在 process 按下右鍵,選擇結束工作即可
操作方式如下
在強制停止 NGINX 服務之後,在重啟IIS 即可正常執行
工作管理員 - 開啟欄位
在工作管理員中可以開啟欄位的設定,一般來說我會特別開 PID、命令列等欄位,PID 是為了瞭解目前執行緒的號碼;命令列是拿來分辨 IIS 的執行 w3wp.exe 執行站台為何 (w3wp.exe - testPool,也就是執行檔加上站台Name),其餘就看自己的需求而定,操作方式透過 gif 呈現如下
後記
後來在追原因發現該 Server 在一早有重啟,可能是機器重新啟動時 NGINX 服務一起來就佔用 80 Port,因此 IIS 後續就無法正常使用,由於目前 NGINX 架設上已不須使用,因此還是建議將其服務砍掉避免之後此問題再次發生 :)
參考
80 通訊埠 被佔用(Port 80 required is already in use)解決辦法
0 意見:
張貼留言