2010-05-24 66 views
1

昨晚我在一個網站上做了一個負載測試。我發現我的一個共享緩存是瓶頸。我正在使用ReaderWriterLockSlim來控制數據的更新。不幸的是,有一次大約在同一時間有大約200次請求嘗試更新數據。這也與CPU使用率峯值一致。ASP.NET檢索平均CPU使用率

正在更新的數據位於ASP.NET緩存中。我想要做的是如果CPU使用率在75%左右,我想跳過緩存並在另一臺機器上點擊數據庫。

我的問題是,我不知道創建一個新的性能計數器來檢查CPU使用率是多麼昂貴。另外,如果我可能會喜歡過去2到3秒內的平均CPU使用率。但是,我不能坐在那裏計算CPU時間,因爲這需要比現在更新緩存所需的時間更長的時間。

有沒有簡單的方法來獲得平均CPU使用率?這有什麼缺點嗎?

我也在考慮總計鎖的等待計數,然後在某個閾值切換到數據庫。我對這種方法的擔憂是,更換硬件可能會在系統上承受更多的鎖而不會造成更多的鎖。而且爲閾值找到適當的平衡將會很麻煩,並且不考慮機器上的其他負載。但這是一個簡單的方法,簡單的是99%的時間更好。

回答

1

微軟的這篇文章涵蓋了Tuning .Net Application Performance,並着重指出要收集和比較哪些計數器以確定CPU和I/O綁定應用程序。

您聽起來好像您想要在執行過程中監視此操作並在事情變得密集時繞過緩存。這不僅僅是將密集處理從緩存調用移動到數據庫調用?當然你有緩存來避免昂貴的數據庫調用。

您是否試圖重新填充無效緩存?從緩存中提供陳舊數據的影響是什麼?您可以鎖定重新填充功能,並將陳舊的數據提供給其他請求,直到過程完成。

根據上述文章,我們在測試過程中收集了以下計數器對象,併爲我們提供了確定瓶頸的所有必要計數器。

  • .NET CLR例外
  • .NET CLR內存
  • ASP.NET應用程序
  • ASP.NET
  • 內存
  • 分頁文件
  • 處理器
  • 螺紋

文章中關於CLR TuningASP.NET Tuning的部分強調了可能發生的瓶頸,並提出了配置更改以提高性能。我們確實對線程池設置進行了更改以獲得更好的性能。

Changing and Retrieving Performance Counter Values可能有助於通過代碼訪問現有的處理器計數器,但這不是我親自嘗試過的。

+0

在回顧了陳舊數據的概念以及數據的實際部分是陳舊的之後,它是有道理的:「您可以鎖定重新填充函數,併爲其他請求提供陳舊數據,直到該過程完成。」 .. 謝謝! – Sam 2010-05-24 23:14:22