只有累積,沒有奇蹟

2019年3月19日 星期二

[IIS] IIS 站台服務異常中止 - HttpEvent

問題
今天同事反應測試主機 IIS Server 無法使用,進到 QA 主機後發現所有的 IIS 服務都已停止,第一直覺就是到事件檢視器查看是否有異常的 Log 資訊,發現事件檢視器紀錄其中來源  HttpEvent  嫌疑重大以下就針對解決此問題的方式做說明,若有問題歡迎提出一起討論或是給予指導。

解決方案
由於公司測試機對外預設都是以 80 port 為主,無故發生異常是蠻很奇怪,過去經驗如果 IIS 異常終止都會在事件檢視器有紀錄,因此第一步是先到事件檢視器查看是否有蛛絲馬跡,其中來源  HttpEvent  時間與異常時間很接近,其詳細錯誤訊息為 '無法為 [::]:80 繫結到其下的傳輸。IP 只聆聽清單可能包含了到不存在於此電腦介面上的參照。資料欄包含了錯誤數目"  ,從錯誤尋息來看有很大可能是 80 port 遭到佔用而影響到 IIS 服務啟動失敗;接下來是確認目前誰搶走了對外的 80 port,步驟如下

使用 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 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com