Share via


節流疑難排解 (Windows Server AppFabric 快取)

當 Windows Server AppFabric 快取主機上的實體記憶體不足時,快取主機會進入稱之為節流的狀態。 快取叢集將不會寫入資料到任何存在於節流快取主機上的快取,直到可用的實體記憶體增加並能解決節流狀態為止。

診斷節流功能

節流最明顯的症狀將來自於應用程式。 嘗試寫入快取將會產生DataCacheException 錯誤。 如需有關例外狀況的詳細資訊,請參閱RetryLater (節流) (Windows Server AppFabric 快取)。 為確認節流已成為快取叢集的一個問題,您可以使用下列的一種或多種測試。

  • 使用 Get-CacheClusterHealth Windows PowerShell 命令。 查看是否有任何快取主機擁有 Throttled 類別中特定百分比的快取。

  • 在每個快取主機的「事件檢視器」中啟用作業記錄檔,並尋找狀態為 "Service in throttled state" 的事件 116。

  • 使用「效能監視器」來追蹤每個快取主機上的記憶體 | 可用 MBytes。 當這個值降到實體記憶體總數的 15% 以下時,快取主機便會進入節流狀態。 當快取主機記憶體降至 CacheSize 設定的 4% 以內時,也會發生節流的情況。

請注意,節流狀態的伺服器也會顯示增加的收回執行作業數目。 如需有關收回問題的詳細資訊,請參閱收回疑難排解 (Windows Server AppFabric 快取)

注意

如需有關上述工具的詳細資訊,請參閱健康情況監控工具 (Windows Server AppFabric 快取)

解決節流的問題

在決定節流的解決方式之前,物必要先瞭解發生的原因。 下表提供可能的原因與建議的解決方案。

節流的原因 描述與解決方式

其他程序使用太多記憶體。

可能是快取主機上的其他程序使用大量的記憶體。 根據保留給「快取服務」的記憶體數量,這可能會導致發生記憶體不足的情況。 您可以使用「效能監視器」中的程序 | 私人位元組計數來偵測這個值,以檢視每個程序所使用的記憶體。 如果「快取服務」(DistributedCacheService.exe) 不是主要的記憶體消費者,請尋找其他消耗高記憶體百分比的程序。 其中一種解決方式,是將問題程序移至其他不是快取主機的伺服器上。 您也可以在電腦上新增更多實體記憶體。

注意

雖然您可以使用 Set-CacheHostConfig 設定快取主機的快取大小,但是這個限制只能決定觸發收回執行作業的時機。 但這並無法保證「快取服務」的記憶體一定會維持在這個層級。 如需詳細資訊,請參閱收回疑難排解 (Windows Server AppFabric 快取)

「快取服務」使用太多記憶體。

您可以使用「工作管理員」或「效能監視器」來識別這個狀況,以檢視「快取服務」(DistributedCacheService.exe) 所使用的記憶體。 可能有一或多個快取已停用到期和/或收回功能。 這會導致發生記憶體不足的情況。 您可以使用 Windows PowerShell 命令 Get-Cache -MaxRegions 0 來查詢叢集中的快取。 您可以使用 Get-CacheConfig 命令來查看每個快取的設定。 如需有關到期和收回的詳細資訊,請參閱到期與收回 (英文)。 可能對快取叢集的需求超過其處理能力。 您可以新增更多實體記憶體到快取主機,或新增其他快取主機到叢集中。

未回收的 .NET 記憶體。

雖然系統會自動執行 .NET 記憶體回收,但有時候在回收與回收之間,未回收的記憶體會導致快取主機發生記憶體不足的情況。 在此案例中,請在節流的快取主機上使用 Windows PowerShell 命令 Invoke-CacheGC 以強制執行完整的記憶體回收循環。 如果持續發生記憶體不足的情況,則表示未回收的 .NET 記憶體並不是構成問題的因素。

自訂區域。

應用程式可以使用 CreateRegion 方法來建立自訂區域。 這些區域一定是以特定快取主機上的單元形式存在。 如果應用程式在單一區域中存放大量的記憶體,那麼即使其他快取主機上有可用的記憶體,還是有可能某個快取主機會變成節流狀態。 此問題的解決方式之一,是在叢集中的每個快取主機中新增更多記憶體,因為您無法確定將選擇哪一個快取主機做為自訂區域。 另一個解決方式是重新設計應用程式,儲存較少資料到區域中,或建立及使用多個區域。

標記雜湊表

有數種 AppFabric 快取方法能讓您利用相關標記將項目儲存到快取中。 使用標記時會建立內部雜湊表,這個表在相關項目移除後也不會被移除。 這並不是記憶體流失,但確實會計入「AppFabric 快取服務」的整體記憶體使用量。 如果應用程式使用會隨時間變化的標記,則這可能會構成記憶體壓力。

另請參閱

概念

疑難排解伺服器問題 (Windows Server AppFabric 快取)

  2011-12-05