由於iis中的工作程序,如何防止100%的CPU使用率
在使用我自己的 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 導致問題方面,您可以:
- 選擇伺服器
- 轉到 IIS > 工作程序
這應該會彈出一個這樣的菜單,以便您可以確定哪個 App Pool 正在執行異常。
從那裡您可以簡單地重新啟動應用程序池,10 次中有 9 次將解決您遇到的任何直接問題。
治療
除非您經營某種有爭議的業務,否則這可能不是 DDOS 攻擊。某些程式碼可能只是掛起,因為它無法通過另一台伺服器或陷入循環或錯誤分配的資源,或者您的應用程序池有一段時間沒有被回收。
您可以通過程式方式處理此問題,而無需手動辨識、登錄和回收應用程序池。只需在您的應用程序池上配置CPU 屬性。您可以在達到 CPU 門檻值一段時間後讓它終止(並自動重新啟動)您的程序。
在您的情況下,如果您希望它以 80% 的速度重新啟動,您可以右鍵點擊應用程序池並轉到高級設置並應用以下配置:
注意:正如kraken101 所指出的,隨著時間的推移,不同的 IIS GUI 對此的處理方式有所不同。雖然配置值始終為 1/1000 %,但有時 GUI 會佔用整個百分比。
您可以將其添加到您的配置部分,如下所示:
<applicationPools> <add name="DefaultAppPool"> <cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" /> </add> </applicationPools>或者,您可以使用 Powershell 的WebAdministration 模組編寫腳本,如下所示:
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預防
上述步驟將有助於修復一些問題,但不會真正解決您遇到的任何潛在問題。
以下是一些有關進行性能監控的資源:


