簡體   English   中英

如何調整應用程序服務器中的緩存

[英]How to tune a cache in an application server

我們的客戶每個應用服務器有數百個項目。

每個項目都有自己的元數據描述符(內存大約1MB,從DB加載大約1秒)。 元數據用於在各個方面(權限,有效字段,字段值等)驗證對服務器的每個請求。我們嚴重依賴於此元數據。

為了節省查詢數據庫的時間,我們決定實現緩存機制(使用EHCache)來存儲項目的元數據。 我們想要正確調整緩存。

我想知道,調整緩存屬性的技巧是什么(總大小,對象數量,疏散策略......)

例如,是否應釋放一段時間未訪問的對象以節省內存? 如何選擇驅逐策略(例如LRU,MRU)?

我們確實擁有一個經驗豐富的負載測試團隊和來自客戶的大量數據(項目數量,平均元數據大小等等),因此構建負載測試環境應該不是問題。 我只是不確定我到底應該尋找什么?

請分享您的緩存調優體驗。

謝謝

關於緩存的關鍵屬性非常簡單......緩存未命中率。 您想要計算某人向緩存中提取某些內容的次數,以及“某些內容”尚未存在於緩存中的次數,后者除以前者的次數就是您的未命中率。

這就是它。 找到一種可靠的方法來衡量您的應用程序,其他一切只是運行測試。 每次調整時,在實際情況下加載測試以檢查未命中率的變化。 可用參數過於依賴於您的問題的具體細節。

我通常會從LRU開始,增加大小,直到我開始看到未命中率的收益遞減,然后嘗試相同大小的LFU以查看它的比較。 當然,除非你碰巧知道你的病例是LRU病態的。

最佳驅逐策略可能在很大程度上取決於具體數據及其使用方式。

以下是一些通用示例:

新聞內容 - 文章每天添加,很少修改 - 緩存用於減少對數據庫服務器的需求。 驅逐策略應該圍繞許多讀取而定制,但幾乎沒有寫入。

論壇主題(可能不是最好的例子) - 驅逐策略應圍繞許多讀取而定制,但也應圍繞頻繁寫入。

雖然可以使用最近最少使用(LRU)逐出策略來最佳地配置新聞內容,但是該示例中的論壇線程可以使用最少使用(LFU)逐出策略來更優化地配置。 當添加新消息時,論壇線程的緩存無論如何都需要經常被替換,但是,LFU策略會將最活躍的線程保留在緩存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM