Windows Server服務(wù)器上w3wp.exe(IIS )CPU占用100%的常見原因及解決辦法
當(dāng)前位置:點晴教程→點晴OA辦公管理信息系統(tǒng)
→『 經(jīng)驗分享&問題答疑 』
對于IIS 管理員來說,經(jīng)常會碰到Web 服務(wù)器CPU占用100% 的情況,以下是個人的日常工作總結(jié)和一些解決辦法,主要用來剖析 w3wp.exe(IIS) 占用CPU 100% 的一些原因和解決方案,希望能對你有所幫助。 w3wp.exe的解釋 : 全名,IIS Application Pool Process。 w3wp.exe是IIS工具的一部。w3wp.exe是在IIS(因特網(wǎng)信息服務(wù)器)與應(yīng)用程序池相關(guān)聯(lián)的一個進程,如果你有多個應(yīng)用程序池,就會有對應(yīng)的多個w3wp.exe的進程實例運行。這個進程用來分配大量的系統(tǒng)資源。 引起 w3wp.exe(IIS ) Cpu 占用 100% 的常見原因如下: 1. Web 訪問量大,從而服務(wù)器壓力大而引起的 這個也是最常見的情況。如果 Web 訪問量大,特別是同時在線人數(shù)過多,處理的 Requests Current(當(dāng)前請求數(shù))過高,就會同時對 IIS 和服務(wù)器造成較大的壓力。特別是 服務(wù)器需要不斷的運算,往客戶端發(fā)送生成后的頁面,這些都需要占用大量的CPU 資源,從而造成 Cpu 100% 2. 動態(tài)頁面(.aspx)的程序邏輯復(fù)雜程度 這個問題,對 w3wp.exe 的 CPU 占用 來說也是蠻嚴(yán)重的,可能在訪問量級比較小的情況下并沒有多少影響,但是在高并發(fā)的網(wǎng)站上面來說,特別是 Asp.Net 的 Requests Current 超過250 的時候,將會是 w3wp.exe 占用 CPU 的一個重要的因素。 我曾經(jīng)碰到過這樣一個情況,兩個 web(A 和 B) 在兩臺 配置相當(dāng)?shù)?服務(wù)器中部署,且兩個站點的訪問量都很大,訪問頁面都集中在兩個站點的兩個單獨頁面,且這兩個頁面 的 IIS 連接數(shù)都是 50個左右,但是頁面程序的復(fù)雜程度就錯了很多,A 站點中的頁面,只有幾個 簡單的 Repeater 綁定, 而 B 站點中的頁面,則有大量的綁定、字符串過濾替換、Repeater 嵌套綁定等等。這樣的情況,在 大流量、高并發(fā)的環(huán)境中,A 站點 在 IIS 連接數(shù) 達(dá)到3 W 多的時候,CPU 占用仍然是 50 % 左右,而 B 站點在 IIS 連接數(shù) 達(dá)到 7K 左右的時候,CPU 就 90% 多了,造成了 服務(wù)器的壓力很大,并且 IIS 遭到了堵塞。 3. 頁面程序中有死循環(huán) 如果Web 訪問量不大,但是 CPU 卻占用很高,那么頁面中的程序肯定有死循環(huán)或者性能比較嚴(yán)重的 程序語句 4. Http方式下載的站點 如果站點是HTTP形式下載站,也遇到過 w3wp.exe 占用 CPU 100% 的情況 5. 服務(wù)器資源不會自動釋放 有時,一個站點的流量在一個小時內(nèi)陡增,結(jié)果操作系統(tǒng)分配了比較多的 CPU 資源,但是當(dāng)流量下去后,w3wp.exe 占用的 CPU 并沒有及時釋放,仍然在保持在 90% 以上 6. 對 IIS 日志文件操作 比如此時分析 IIS 日志文件里面的數(shù)據(jù),把 IIS Log 日志導(dǎo)入到數(shù)據(jù)庫中等操作,也會造成此現(xiàn)象 解決辦法: 1. 快速定位到出問題的站點 利用iisapp -a 命令,快速的定位到出問題的站點。當(dāng)然如果當(dāng)前服務(wù)器只跑了一個web站點,那么此步驟可以跳過 在 cmd 中 輸入 iisapp - a ,會出現(xiàn)下圖中的信息: 當(dāng)然,這個要求你沒個站點,都要有獨立的應(yīng)用程序池與之對應(yīng),應(yīng)用程序池的名稱,優(yōu)選就是站點的名稱,如下圖: 關(guān)于 IIS 的應(yīng)用程序池的配置,這里就不說了,不懂的可以search 下 之后,再打開任務(wù)管理器,如下圖: 觀察進程為 w3wp.exe 的,查看那個CPU 占用的高,再利用其 PID 于 iisapp 中列出的結(jié)果對比,就能輕松的找出是那個站點占用的CPU過高了 2. 重啟 IIS 和 應(yīng)用程序池 此步是緊急處理,一般都是治標(biāo)不治本的步驟。如果你的站點搭建的有 負(fù)載均衡(負(fù)載均衡、NLB),那么請在 負(fù)載均衡(負(fù)載均衡、NLB)把當(dāng)前服務(wù)器下了,然后重啟。如果你沒有 負(fù)載均衡(負(fù)載均衡、NLB),而且你的站點又是在線的,那么,就悲劇10多秒吧,短暫的不能訪問吧 3. 給頁面加上頁面級別緩存 如果Web 是 Asp.Net 程序,那么請一定要 <%@ OutputCache Duration="10" VaryByParam="none"%>。但是有好多人都沒有用好 OutputCache ,導(dǎo)致經(jīng)常出現(xiàn)下載頁面的問題,所以都放棄了使用,這里有 OutputCache 導(dǎo)致頁面下載的解決辦法 。 OutputCache 非常有用,好處有三:直接從內(nèi)存讀頁面,頁面響應(yīng)速度更快,用戶體驗更好;大大的降低了服務(wù)器的壓力,特別是對于高并發(fā)的網(wǎng)站,特別是 CPU 的壓力;減少了 DB 的強求,降低 DB(數(shù)據(jù)庫)的壓力。 4. 檢查頁面邏輯 如果WEB 流量很低,但是還有 w3wp.exe(IIS ) CPU 占用 100% 左右的情況,那么就檢查頁面的代碼邏輯吧,很有可能是死循環(huán)或大量的運算導(dǎo)致。 該文章在 2016/12/8 15:32:58 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |