溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

發(fā)布時(shí)間:2021-11-06 17:03:46 來(lái)源:億速云 閱讀:157 作者:柒染 欄目:建站服務(wù)器

這篇文章給大家介紹怎么在IIS 7.x應(yīng)用程序池中排除高CPU,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

<h5 id="tools-used-in-this-troubleshooter" ">此疑難解答中使用的工具:

  • 調(diào)試診斷1.2

  • 性能監(jiān)視器

此材料僅供參考。Microsoft不作任何明示或暗示的保證。

概觀

此問題排查工具將幫助您識(shí)別IIS應(yīng)用程序池中持續(xù)存在的高CPU的原因。重要的是要記住,隨著Web應(yīng)用程序提供請(qǐng)求,CPU使用率正常增加。但是,如果您始終認(rèn)為CPU長(zhǎng)時(shí)間保持在高水平(在80%或更高的區(qū)域),您的應(yīng)用程序的性能將會(huì)受到影響。因此,了解持續(xù)高CPU的原因很重要,以便可以解決和糾正

腳本

IIS中的應(yīng)用程序池遇到長(zhǎng)時(shí)間超過(guò)90%的高CPU。當(dāng)測(cè)試應(yīng)用程序時(shí),不會(huì)遇到任何問題。然而,一旦應(yīng)用程序遇到實(shí)際的用戶負(fù)載,CPU將爬升到很高的百分比并保持不變。要恢復(fù),應(yīng)該重新啟動(dòng)應(yīng)用程序池,但是在這樣做之后,CPU再次爬上高層。

數(shù)據(jù)采集

遇到高CPU時(shí),首先應(yīng)該做的是確定正在消耗CPU的進(jìn)程。您可以使用任務(wù)管理器中的進(jìn)程選項(xiàng)卡來(lái)執(zhí)行此操作。確保您檢查顯示所有用戶的進(jìn)程復(fù)選框。圖1顯示了此框,并顯示了w3wp.exe進(jìn)程(承載IIS應(yīng)用程序池的進(jìn)程),消耗高級(jí)別的CPU。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖1 - 任務(wù)管理器顯示高CPU。

您還可以使用性能監(jiān)視器來(lái)確定使用CPU的進(jìn)程。有關(guān)使用性能監(jiān)視器的更多信息,請(qǐng)參閱此故障排除程序中稍后分析性能數(shù)據(jù)。

小費(fèi)

如果您需要確定哪個(gè)應(yīng)用程序池與特定的w3wp.exe進(jìn)程相關(guān)聯(lián),請(qǐng)打開管理命令提示符,切換到該%windir%\System32\inetsrv文件夾cd %windir%\System32\inetsrv并運(yùn)行appcmd list wp。這將以引號(hào)顯示w3wp.exe進(jìn)程的進(jìn)程標(biāo)識(shí)符(PID)。您可以將該P(yáng)ID與任務(wù)管理器中可用的PID相匹配。

一旦您確認(rèn)w3wp.exe進(jìn)程遇到高CPU,您將需要收集兩條信息,以確定導(dǎo)致問題的原因。

  • 性能監(jiān)視器數(shù)據(jù)收集器集。

  • w3wp.exe進(jìn)程的用戶模式內(nèi)存轉(zhuǎn)儲(chǔ)。

這些都將需要在高CPU事件期間收集。

收集性能監(jiān)視器數(shù)據(jù)收集器集

性能監(jiān)視器(Perfmon)數(shù)據(jù)對(duì)于確定高CPU問題的原因往往至關(guān)重要。獲取應(yīng)用程序執(zhí)行的“大圖”視圖也是非常有用的。

可以實(shí)時(shí)查看Perfmon數(shù)據(jù),也可以將其收集到數(shù)據(jù)收集器集中,以便稍后進(jìn)行查看。為了排除高CPU問題,我們需要收集數(shù)據(jù)收集器集。要?jiǎng)?chuàng)建用于排除高CPU故障的數(shù)據(jù)收集器集,請(qǐng)按照下列步驟操作。

  1. 從Windows控制面板打開管理工具。

  2. 雙擊性能監(jiān)視器。

  3. 展開“數(shù)據(jù)收集器集”節(jié)點(diǎn)。

  4. 右鍵單擊“用戶定義”,然后選擇“新建”,“數(shù)據(jù)收集器集”。

  5. 輸入高CPU作為數(shù)據(jù)采集器的名稱。

  6. 選擇手動(dòng)創(chuàng)建(高級(jí))單選按鈕。

  7. 點(diǎn)擊下一步。

  8. 選擇創(chuàng)建數(shù)據(jù)日志單選按鈕。

  9. 檢查性能計(jì)數(shù)器復(fù)選框。

  10. 點(diǎn)擊下一步。

  11. 單擊添加按鈕。

    如果您的應(yīng)用程序不是ASP.NET應(yīng)用程序,請(qǐng)繼續(xù)執(zhí)行步驟19。

  12. 滾動(dòng)到計(jì)數(shù)器列表的頂部,然后選擇.NET CLR內(nèi)存。

  13. 在實(shí)例列表中,選擇<all instances>。

  14. 單擊添加按鈕將計(jì)數(shù)器添加到添加的計(jì)數(shù)器列表。

  15. 從計(jì)數(shù)器列表中選擇ASP.NET,然后單擊添加。

  16. 從計(jì)數(shù)器列表中選擇ASP.NET應(yīng)用程序。

  17. 從實(shí)例列表中選擇<all instances>。

  18. 單擊添加。

  19. 從計(jì)數(shù)器列表中展開“處理”。(確保展開Process而不是處理器。)

  20. 從Process對(duì)象中選擇%Processor Time。

  21. 從實(shí)例列表中選擇<all instances>。

  22. 單擊添加。

  23. 從計(jì)數(shù)器列表中展開線程。

  24. 從Thread對(duì)象中選擇%Processor Time。

  25. 從實(shí)例列表中選擇<all instances>。

  26. 單擊添加。

  27. 從實(shí)例列表中選擇ID線程。

  28. 單擊添加。

您的對(duì)話框現(xiàn)在應(yīng)該如圖2所示。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖2 - 創(chuàng)建數(shù)據(jù)收集器集。

單擊確定按鈕,然后單擊下一步按鈕。記下保存數(shù)據(jù)收集器的位置。(如果需要,可以更改此位置。)然后單擊完成。

數(shù)據(jù)收集器集尚未運(yùn)行。要啟動(dòng)它,請(qǐng)右鍵單擊用戶定義節(jié)點(diǎn)下的高CPU,然后從菜單中選擇開始。

創(chuàng)建調(diào)試診斷1.2規(guī)則

發(fā)生高CPU狀況時(shí)收集用戶模式進(jìn)程轉(zhuǎn)儲(chǔ)的最簡(jiǎn)單方法是使用Debug Diagnostics 1.2或DebugDiag。您可以從以下URL下載DebugDiag。

https://www.microsoft.com/download/en/details.aspx?id=26798

在您的服務(wù)器上安裝DebugDiag 1.2并運(yùn)行它。(安裝后您將在開始菜單中找到它。)運(yùn)行DebugDiag時(shí),將顯示“選擇規(guī)則類型”對(duì)話框。按照以下步驟為應(yīng)用程序池創(chuàng)建崩潰規(guī)則。

  1. 選擇性能并單擊下一步。

  2. 選擇性能計(jì)數(shù)器,然后單擊下一步。

  3. 單擊添加Perf觸發(fā)器。

  4. 展開Processor(而不是Process)對(duì)象并選擇%Processor Time。請(qǐng)注意,如果您在Windows Server 2008 R2上,并且有超過(guò)64個(gè)處理器,請(qǐng)選擇Processor Information對(duì)象而不是Processor對(duì)象。)

  5. 在實(shí)例列表中,選擇_Total。

  6. 單擊添加,然后單擊確定。

  7. 選擇新添加的觸發(fā)器,然后單擊編輯閾值,如圖3所示。

  8. 在下拉列表中選擇上方。

  9. 將閾值更改為80。

  10. 輸入20秒的秒數(shù)。(如果需要,您可以調(diào)整此值,但請(qǐng)注意不要指定少量秒鐘以防止發(fā)生錯(cuò)誤觸發(fā)。)

  11. 單擊確定。

  12. 點(diǎn)擊下一步。

  13. 單擊添加轉(zhuǎn)儲(chǔ)目標(biāo)。

  14. 從下拉列表中選擇Web應(yīng)用程序池。

  15. 從應(yīng)用程序池列表中選擇您的應(yīng)用程序池。

  16. 單擊確定。

  17. 點(diǎn)擊下一步。

  18. 再次點(diǎn)擊下一步。

  19. 如果您希望輸入規(guī)則的名稱,并記下要保存轉(zhuǎn)儲(chǔ)的位置。如果需要,您可以更改此位置。

  20. 點(diǎn)擊下一步。

  21. 選擇激活規(guī)則,然后單擊完成。

小費(fèi)

您可以使用與步驟13-15中使用相同的技術(shù)添加多個(gè)轉(zhuǎn)儲(chǔ)目標(biāo)來(lái)創(chuàng)建多個(gè)應(yīng)用程序池的轉(zhuǎn)儲(chǔ)。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖3 - 在DebugDiag中添加perf觸發(fā)器。

此規(guī)則將創(chuàng)建11個(gè)轉(zhuǎn)儲(chǔ)文件。前10名將是“小型轉(zhuǎn)儲(chǔ)”,規(guī)模相當(dāng)小。最后的轉(zhuǎn)儲(chǔ)將是一個(gè)具有完整內(nèi)存的轉(zhuǎn)儲(chǔ),并且轉(zhuǎn)儲(chǔ)將會(huì)更大。

一旦發(fā)生高CPU問題,您將要停止收集數(shù)據(jù)的Perfmon數(shù)據(jù)收集器集。為此,請(qǐng)右鍵單擊用戶定義節(jié)點(diǎn)下列出的高CPU數(shù)據(jù)收集器集,然后選擇停止。

數(shù)據(jù)分析

在高CPU事件之后,您將有兩組要查看的數(shù)據(jù); Perfmon數(shù)據(jù)收集器集和內(nèi)存轉(zhuǎn)儲(chǔ)。我們先來(lái)看一下Perfmon的數(shù)據(jù)。

分析性能數(shù)據(jù)

要查看您的問題的Perfmon數(shù)據(jù),請(qǐng)右鍵單擊用戶定義節(jié)點(diǎn)下列出的高CPU數(shù)據(jù)收集器集,然后選擇最新報(bào)告。您會(huì)看到類似于圖4所示的屏幕。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖4 - Perfmon顯示高CPU數(shù)據(jù)。

首先要?jiǎng)h除所有當(dāng)前的計(jì)數(shù)器,以便您可以添加要查看的顯式計(jì)數(shù)器。選擇列表中的第一個(gè)計(jì)數(shù)器。然后滾動(dòng)到列表的底部,然后在按住鍵盤上的Shift鍵的同時(shí)單擊最后一個(gè)計(jì)數(shù)器。選擇所有計(jì)數(shù)器后,按鍵盤上的Delete鍵將其刪除。

現(xiàn)在使用這些步驟添加Process /%Processor Time計(jì)數(shù)器。

  1. 右鍵單擊Perfmon右窗格中的任意位置,然后選擇添加計(jì)數(shù)器。

  2. 展開Process對(duì)象。

  3. 從列表中選擇%Processor Time。

  4. 從實(shí)例列表中選擇<all instances>。

  5. 單擊添加。

  6. 單擊確定。

現(xiàn)在將顯示一個(gè)顯示數(shù)據(jù)收集器集運(yùn)行時(shí)計(jì)算機(jī)上每個(gè)進(jìn)程使用的處理器時(shí)間的圖形。隔離哪個(gè)進(jìn)程使用最高級(jí)別CPU的最簡(jiǎn)單的方法是啟用Perfmon的高亮功能。

為此,請(qǐng)選擇列表中的第一個(gè)計(jì)數(shù)器,然后按Ctrl + H。完成此操作后,所選的過(guò)程將在圖形上顯示為粗體黑線。

使用鍵盤上的向下箭頭向下移動(dòng)進(jìn)程列表,直到找到顯示最多CPU使用率的進(jìn)程。在圖5中,您可以清楚地看到w3wp.exe進(jìn)程在計(jì)算機(jī)上使用了大量的CPU。這證實(shí)IIS應(yīng)用程序池在計(jì)算機(jī)上造成高CPU利用率。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖5 - 顯示w3wp.exe的CPU使用情況的Perfmon。

小費(fèi)

Perfmon可以在確定應(yīng)用程序中的性能問題方面非常有用。Perfmon日志中收集的數(shù)據(jù)可以顯示您正在執(zhí)行的請(qǐng)求數(shù)量(使用ASP.NET和ASP.NET應(yīng)用程序?qū)ο螅?,還可以向您顯示有關(guān)應(yīng)用程序執(zhí)行情況的其他重要性能數(shù)據(jù)。

要解決導(dǎo)致高CPU問題的根源,我們來(lái)看看使用DebugDiag創(chuàng)建的轉(zhuǎn)儲(chǔ)。

使用DebugDiag進(jìn)行轉(zhuǎn)儲(chǔ)分析

DebugDiag可以通過(guò)進(jìn)行自動(dòng)轉(zhuǎn)儲(chǔ)分析來(lái)識(shí)別許多問題。對(duì)于這個(gè)特殊問題,DebugDiag的性能分析器非常適合幫助確定高CPU問題的根本原因。要使用分析儀,請(qǐng)按照下列步驟操作

  1. 選擇DebugDiag中的Advanced Analysis選項(xiàng)卡。

  2. 選擇性能分析儀。

  3. 單擊添加數(shù)據(jù)文件。

  4. 瀏覽到創(chuàng)建轉(zhuǎn)儲(chǔ)的位置。默認(rèn)情況下,這將是文件夾的子C:\Program Files\DebugDiag\Logs文件夾。

  5. 選擇一個(gè)轉(zhuǎn)儲(chǔ),然后按Ctrl + A選擇該文件夾中的所有轉(zhuǎn)儲(chǔ)。

  6. 單擊打開。

  7. 單擊開始分析。

DebugDiag將需要幾分鐘的時(shí)間來(lái)解析轉(zhuǎn)儲(chǔ)并提供分析。完成分析后,您將看到類似于圖6所示的頁(yè)面。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖6 - DebugDiag分析報(bào)告。

請(qǐng)注意,報(bào)告的頂部告訴您檢測(cè)到高CPU。在右欄中,您會(huì)看到建議,其中包括平均CPU時(shí)間前7位線程的鏈接。點(diǎn)擊該鏈接,您將看到有關(guān)這些頂級(jí)CPU消費(fèi)者在做什么的信息。圖7顯示了我的應(yīng)用程序中這些線程正在做什么。

怎么在IIS 7.x應(yīng)用程序池中排除高CPU

圖7 - 高CPU線程的詳細(xì)信息。

從此分析可以看出,F(xiàn)astApp應(yīng)用程序中的default.aspx頁(yè)面正在運(yùn)行。如果我進(jìn)一步向下調(diào)用堆棧(在頁(yè)面的底部),我可以看到這個(gè)線程正在進(jìn)行字符串連接。(請(qǐng)注意在調(diào)用堆棧上調(diào)用System.String.Concat。)如果我分析其他頂級(jí)的CPU線程,我看到相同的模式。

下一步是查看FastApp應(yīng)用程序的default.aspx頁(yè)面中的Page_Load事件。當(dāng)我這樣做,我找到以下代碼。

HTML復(fù)制

htmlTable += "<< 5000; x++)
{ htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</<</</</		結(jié)論通過(guò)使用Perfmon和DebugDiag,您可以輕松收集有助于確定應(yīng)用程序池中高CPU的原因的數(shù)據(jù)。如果您無(wú)法使用這些技術(shù)找到根本原因,您可以通過(guò)https://support.microsoft.com/與Microsoft打開支持票據(jù),我們可以幫助您確定問題的原因。當(dāng)您打開案例時(shí),通過(guò)將Perfmon數(shù)據(jù)和轉(zhuǎn)儲(chǔ)準(zhǔn)備給我們,您將大大減少我們協(xié)助您所需的時(shí)間。<h4 id="other-resources" ">其他資源
				排除高CPU利用率			
				排除高CPU性能問題			
				什么收集排除高CPU或掛起			
				.NET調(diào)試演示			
				IIS工作進(jìn)程性能監(jiān)控提示			

關(guān)于怎么在IIS 7.x應(yīng)用程序池中排除高CPU就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI