Hello developers,
I have been doing a nifty little cache monitor on
www.curriki.org which is still running
xwiki 1.5.4.
It can show the entries and capacity of the two xwiki caches, pageExistCache and the
document cache which sound pretty central.
Not surprisingly, they're both full on our production server.
name entries capacity
pageExistCache 10000 10000
cache 3000 3000
The caches are using OSCache (through "OSCacheCache").
I've been trying to get a real statistical count but there I kind of failed thus far.
I can use the StatisticListenerImpl which gives fairly high numbers:
StatisticListenerImpl: Hit = 9583563 / 1320251374,
stale hit = 0 / 538, miss = 8541 / 17175236, flush = 27348, entries (added, removed,
updates) = 25457741, 0, 7678101
these numbers are integers, and might actually be
too small for the 2billions limit of an int, they are static (so count "all the
OSCache instances").
What I would like to get is the "eviction rate" but I do not know how to compute
it.
That is, I wish to read the number of cache-entries which are thrown away because the
cache is full and others come in.
Once I can have it, I can start tuning (cache size, less greedy algorithms, ...) and
measure the effect of such tuning. We have plenty of RAM space to accommodate the cache
but we should use this well.
The big annoyance with this process is that it can only run on our production server. So
thus far I did not dare register a CacheListener in groovy fearing it would suddenly be
slow.
Has anyone used a different strategy or tool?
I'm happy to post my little monitor script.
thanks in advance.
paul