iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

30天 IIS 面面觀系列 第 7

Day7. 每一個成功的IIS背後,都有很多個服務(下) - Services中IIS的重要角色與服務

  • 分享至 

  • xImage
  •  

上篇說到關於 Process 的起來,最主要相關的服務是 W3SVC 和 WAS,讓我們這篇多說一些關於背後起來的交互方式。

先上一張圖(圖源來自官方文檔)

https://ithelp.ithome.com.tw/upload/images/20220922/201420578T6mnp3KYb.png

在介紹整體關係之前,這張圖有一個地方大家可能比較不熟悉,就是 HTTP.sys。

可以看到圖的上半跟下半畫了一條虛線,上半是 User Mode,下半是 Kernel Mode。 Kernel Mode 能掌管所有硬體和系統層級的處理,User Mode 則是一般使用者使用的場景,當萬一需要調動到系統資源,才會再和 Kernel Mode 做溝通,讓 Kernel Mode 來調動。

Http.sys 就是被註冊於 Kernel mode 的網路驅動程式,實體位置位於 C:\Windows\System32\drivers\http.sys(不建議去動這個檔案,只是提供資訊)。主要負責監聽來自 internet 的 http request。 Http.sys 也有 cache 功能來針對部分內容作快取,增加回應速度,在這篇官方文檔裡,有反向列出不會被 cache 的場景,當要調整讀取效能的時候是一個參考依據,可以思考應該被使用的類型及調整方式。另外如果想知道那些被 cache 住了,可以透過這個 cmd 裡打這個 command 來做確認。

netsh http show cache [ [url= ] URL]
//sample : show cachestate url=https://www.contoso.com:80/myresource

在 Http.sys 出錯的 request log 會被寫在 C:\Windows\System32\LogFiles\HTTPERR,在 W3SVC/WAS 層面出錯的會寫在 System Event Viewer,

現在可以來說說 Process 是怎麼被建立的了(下列數字對應到上圖中的數字):

(1)當一個 Http request 來到這個 endpoint

(2)首先他會去問 WAS 拿 config

(3)WAS 從存著 config 的地方拿到對應到哪個站點/ application pool 的設定,寫入 C:\inetpub\temp\appPools\ 位置,當收到通知會跟著更新

(4)W3SVC取出對應的細部 site / application pool 的設定

(5)W3SVC 返回資訊給 Http.sys 並設定

(6)WAS 依設定方式起對應的 Process (W3WP.exe)
(7)W3WP.exe 處理 request 內容並把回應傳給 Http.sys

(8)Http.sys 把訊息回給 Client 端

可以看到在第 6 步會處理到 Process 的建立,這邊說的就是 Worker Process,W3WP.exe。如果 request 碰到這邊,有設定對應的 Logging module,那 Log 就會被寫入 IIS Log(C:\intepub\logs\LogFiles\W3SVC*)中(依情況也可能於 System Event log 留下相對應紀錄)。

另外在 Task Scheduler 中你要怎麼分辨哪個是 w3wp.exe 是屬於哪個網站呢?執行中的 Process 都會有 unique 的 process Id,各網站的 process Id 你可以在這個介面裡找到

https://ithelp.ithome.com.tw/upload/images/20220922/20142057gKzVQvYUli.png

https://ithelp.ithome.com.tw/upload/images/20220922/20142057KsPj9jPHvY.png

如上圖,我們知道現在這個 DemoWebsite 他的 process Id 是 27620,我們打開 task manager 就可以找到對應 id 的 process。

https://ithelp.ithome.com.tw/upload/images/20220922/20142057SvNxSHMv9T.png

另外,command line 通常會有實體執行相關的資訊,如果你新增欄位,也可能可以直接從這邊就知道這個 process 歸屬於哪個 application。

今天的分享大致講述了幾個 request 處理流程中會互動到的主要組件,也說明了誰會起 process, process 該如何查看實體等等,是一個比較高層面的概覽。另外也提到了各組件寫 Log 的地方,只要問題發生,第一步其實應該先診斷是哪裡出問題,或反向透過 Log 有紀錄的地方來發現這一點,關於各個 Log 的解讀與工具,我們會留在後面一一分享。


上一篇
Day6. 每一個成功的IIS網站背後,都有很多個服務(上) - Services中IIS的重要角色與服務
下一篇
Day8. 全面啟動,或全面重新啟動 - Restart、Stop、IIS Reset
系列文
30天 IIS 面面觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言