觀察特定 IIS Application Pool 使用資源

其實是一個很常見的小技巧,不過不常用有的時候還是會忘記,在 IIS 下我們可能會執行多個 process 來處理多個 web Site ,那假如說今天某一個 Site 狀況不穩定的時候,怎麼用系統管理員觀察特定的 Site 。

image

在系統管理員中看到的都是 w3wp 的 process 這代表著一個個的 Application pool ,所以如果有多個 Web Site 共用 App Pool 就沒有辦法在這邊看出使用情況了,但是在系統管理員中的都是顯示 w3wp 雖然我們知道說這是代表 App Pool 的使用,可是並不知道說哪個對應到哪個 App Pool 。

系統管理員選擇顯示欄位

從顯示 > 選擇欄位,可以看到如下的畫面,在勾選 PID process Id 可以顯示出每一支 process 的 id,再利用這個欄位來做 App Pool 的對應。

image

IIS App Pool 顯示 PID (IIS6)

找到 process id 的對應之後接下來就是要顯示每支 App Pool 執行的 PID 這樣就可以找到每支 App Pool 使用的 CPU 還有記憶體資源。利用 IisApp.vbs 這一支內建的程式可以取得 App Pool PID。

image

這樣就可以跟系統管理員顯示的 w3wp.exe 做對應。

IIS App Pool 顯示 PID (IIS7)

如果是 IIS7 的話則是使用 appcmd list wp 來顯示對應的 PID

image

IIS 6 下發佈 ASP.NET MVC 造成 Directory Listing Denied

image

今天在將專案發佈到正式環境時發生了 Directory Listing Denied 的錯誤。

  • ASP.NET MVC 3
  • IIS6
  • .Net Framework 4

造成的原因

這個錯誤一開始看到會覺得是權限設定的問題,看到 Denied 就覺得是權限。但是仔細觀察一番之後才發現不是這樣,Directory Listing  指的是列出目錄清單,可是一般網頁應該只要開放瀏覽權限就可以了阿。難怪會權限不足。所以真正的問題點應該是在為什麼在執行瀏覽的時候會去要求列出清單。

其實是在 IIS6 預設情況下,都是用要求檔案副檔名來決定用什麼程序處理。相關設定在(網站>內容>主目錄>設定)。而在 ASP.NET MVC 則是利用 Route 來做對應,Request 對應的並不是檔案,而是直接由處理程序來處理。所以當 IIS6 在預設內容找不到檔案的時候,就會要求列出整個網站目錄,但是這個時候就因為權限不足而被阻止了。

解決方法

既然是因為這個原因,所以解決的方法就是將 aspnet_isapi.dll 可以在 Request 不是一個檔案的時候加入進行處理。

網站>內容>主目錄>設定

上方就是副檔名與執行檔的對應,而要做的部分是在萬用字元程式對應的地方加入 c:windowsmicrosoft.netframeworkv4.0.30319aspnet_isapi.dll。

image

image

image


ASP.NET 4.0 安裝在 IIS6 最常遇到的四個問題

asp.net – MVC 3 Deployment to IIS6 – Stack Overflow

ASP.NET MVC on IIS 6 Walkthrough