當解決問題的時候,除了「你還能重現嗎」外另一個很常問的就是「你有重開過了嗎」,重開就像一種魔法,讓一切回到最開始的狀態,好像能夠解決許多說不清道不明的神祕錯誤。儘管不是最根本的 Root cause 解決,卻是常常能夠快速緩解問題的有效手段之一。而重開也是有範圍的,就像如果一個網頁出錯了,你可能會選擇重開瀏覽器,而不是第一步就直接重開機。
在前面介紹流程中,我們其實走過了 IIS 多數的階層,Site,Application Pool,Services,遇到那些問題我們該怎麼重開、影響範圍到哪裡,裡面看起來跟重開相關的操作又有什麼不一樣,讓我們這篇來討論一下。
我們從範圍最小的 Site 開始,在 Site 的層面,可以看到我們對網站狀態控制有這幾個按鍵:
Start,Stop,Restart。按下 Stop site就會停止服務,當你遇到像這樣的畫面,也許就是 site 停止中。在停止中的 site 上面設定的 Binding 就不會在系統中有指向,本來該到 site 上的端點引導現在失去了能去的地方,也就出現了 can't reach 的錯誤。
這邊提供一個 command 可以做確認目前網路層面有在監聽的 port / record 與相關服務:
netsh http show servicestate
你可以嘗試看看,無論 site 下面綁定了多少 binding,當 site 是停止的時候,這邊就不會有內容
當你把網站再按下 start 開起來,就會看到站上的 binding 顯示
對網站的操作都只會影響單一網站層級,今天 stop A 網站,同樣運行的 B 網站只要沒有功能層面相依,在 IIS 上是互不影響的。如果單一網站有問題,可能會從對單一網站的嘗試重啟做起。可能有人會好奇,我先按 stop 再按 start,跟我直接按 restart,有什麼不一樣嗎?答案是:基本一樣,差在 restart 是停止後他就直接幫你 start,手動的 stop 到手動按 start 的時間區段長度你可以自己控制。所以在你想要網站直接立刻嘗試重啟,沒有其他相依操作的情況下,直接按 restart 就好了;如果你在比對其他服務的狀況,需要在關掉其他服務的狀況下重啟,那你可能會手動先關網站、去關服務,再手動打開網站。基本就取決於你希望「網站服務起來的時間」來決定你要用哪個方式重啟。
再看到下一個層級,Application Pool。之前說過 Site 和 Application Pool 的關係,一套 Application Pool 的設定可以被多個 Site 套用。在對 Application Pool 做操作的時候,要意識到上面有幾個網站相依於他,這個停止的動作會影響到多少網站。
Application pool 能做的操作跟 Site 其實差不多,只是這邊不叫 Restart,而是叫做 Recycle。兩者間有差別嗎?有的,Application Pool 的 Stop + Start 跟 Recycle 就有了一些差別。Recycle 做下去,背後會停掉舊的 Process ,起一個新的 Process。然而這個時間段是會有重疊的,Recycle 會清掉舊的 Process 的時間是會讓舊的 Process 先把目前他拿到的 request 做完,或是設定的時間到了,才會停止舊的 Process,同時新進來的 request 就會交由新的 Process 處理。
重啟 Site 如果不能解決問題,那麼再來就會到嘗試重啟 Application Pool。
最後到了 Services 層級,前面才介紹過和 IIS 相關的 Services 們,如果我們想重啟相關的 Services,除了手動去 UI 那邊檢查、操作以外,有什麼方式嗎?有的,通常這個指令會是最後一步,確定前面排查都做了,才會走到這裡: iisreset
這個指令打的時候要小心一點,查指令忘記打問號就要真的觸發 iisreset 了。可以看到這邊有許多會影響大範圍的設定,一般人們常說的直接打 iisreset 的 default 行為其實是 iisreset /restart,只是預設不打後面那段也是這樣,所以常常大家都會只輸入 iisreset 來做大範圍的重啟。
實際後面會被重啟的服務包含 IISADMIN、W3SVC、WAS,同時所有連線、Session 都會段開,甚至可能引起正在處理中的資料遺失,一般來說並不建議使用這個 command,通常是最後沒有辦法,確定了解到會造成相關 down time 的準備了,才會使用它。
以上大概就是這篇的內容,介紹了 IIS 中各種層級重啟的方式與選項,還有會造成影響的範圍,一般除錯都盡可能從小的範圍開始嘗試,真的不行、驗證過同層級的其他也有問題,才會往上一個層級去做重啟。做重啟最重要的就是要意識到這個按鈕按下去,會影響到那些服務,是不是做好對應的準備了,重啟就像個黑魔法,雖然能解決很多奇怪的問題,用不好的情況下,可能也會帶來很多麻煩地。