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.
FYI, newer versions of XE uses JBoss as the default cache implementation. And JBoss offers
JMX support.
Thus you can get all sort of cache stats using JMX.
See here for example:
Not sure it helps you but thought you should know (if you're not already aware of
it!)
Thanks
-Vincent