Asp.net

由於iis中的工作程序,如何防止100%的CPU使用率

  • February 21, 2013

在使用我自己的 vps、vmware、四核和 4GB 記憶體的 Windows Server 2008-R2 中,我的 CPU 使用率大部分時間都是 100%。當我打開 Windows 任務管理器並轉到資源監視器時,我看到 100% 的使用率是因為workerprocess.exe. 我的 IIS 中有 3 個網站。

  • 我怎樣才能確定哪個網站導致了這種使用
  • 如何將其限制為 CPU 使用率的 80%?
  • 會不會是 DDOS 攻擊?
  • 有什麼方法可以防止 DDOS 嗎?

我在我的 vps 上安裝了 eset-nod32,但它沒有在日誌中顯示任何攻擊。我已經嘗試搜尋 IIS 並防止 DDOS,並且剛剛找到了一個禁止 IP 地址的擴展,但我如何才能找到哪個 IP 地址正在產生流量?

該網站是用ASP.NET和編寫的C#。如何確定該網站上發生了什麼以及哪些程式碼行導致了 CPU 使用率?

另外,我的一個網站應該訪問管理員的桌面並讀寫一些文件。因此,我將其應用程序池 -> 身份(程序模型)更改為本地系統,我不知道它是否與 CPU 使用率有關。

好吧,這可能需要很長時間才能弄清楚。有幾點可以縮小範圍:

  • 確定是什麼殺死了 CPU。我推薦 Process Explorer <http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx>
  • 確定導致此問題的 AppPool
  • 修復你的程式碼

診斷

在診斷 App Pool 導致問題方面,您可以:

  1. 選擇伺服器
  2. 轉到 IIS > 工作程序

伺服器設置

這應該會彈出一個這樣的菜單,以便您可以確定哪個 App Pool 正在執行異常。

工作程序

從那裡您可以簡單地重新啟動應用程序池,10 次中有 9 次將解決您遇到的任何直接問題。

治療

除非您經營某種有爭議的業務,否則這可能不是 DDOS 攻擊。某些程式碼可能只是掛起,因為它無法通過另一台伺服器或陷入循環或錯誤分配的資源,或者您的應用程序池有一段時間沒有被回收。

您可以通過程式方式處理此問題,而無需手動辨識、登錄和回收應用程序池。只需在您的應用程序池上配置CPU 屬性。您可以在達到 CPU 門檻值一段時間後讓它終止(並自動重新啟動)您的程序。

在您的情況下,如果您希望它以 80% 的速度重新啟動,您可以右鍵點擊應用程序池並轉到高級設置並應用以下配置:

應用程序池高級設置

注意:正如kraken101 所指出的,隨著時間的推移,不同的 IIS GUI 對此的處理方式有所不同。雖然配置值始終為 1/1000 %,但有時 GUI 會佔用整個百分比。

您可以將其添加到您的配置部分,如下所示:

&lt;applicationPools&gt;
  &lt;add name="DefaultAppPool"&gt;
    &lt;cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" /&gt;
  &lt;/add&gt;
&lt;/applicationPools&gt;

或者,您可以使用 Powershell 的WebAdministration 模組編寫腳本,如下所示:

(*確保啟用了 web-scripting-tools

Import-Module WebAdministration

$appPoolName = "DefaultAppPool"
$appPool = Get-Item "IIS:\AppPools\$appPoolName"
$appPool.cpu.limit = 80000
$appPool.cpu.action = "KillW3wp"
$appPool.cpu.resetInterval = "00:01:00"
$appPool | Set-Item

預防

上述步驟將有助於修復一些問題,但不會真正解決您遇到的任何潛在問題。

以下是一些有關進行性能監控的資源:

引用自:https://stackoverflow.com/questions/14992383