[ https://issues.apache.org/jira/browse/JCR-1112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12528718 ]
Martijn Hendriks commented on JCR-1112: --------------------------------------- Hi, I think that there are some issues with the current CacheManager that could be improved: - The MLRUItemStateCache.touch method triggers the CacheManager.cacheAccessed method, which may call resizeAll. When the system is heavily loaded, many threads may unnecessarily be blocked by the synchronized block in CacheManager.cacheAccessed. The chances for this increase as SLEEP decreases and the time needed for resizeAll increases. This could easily be improved . - The resizeAll method is expensive (for MLRUItemStateCaches, which are used everywhere) because it calls MLRUItemStateCache.getMemoryUsed, which recalculates the size of each entry in the cache (linear complexity in the size of the cache...). Since the NodeState/PropertyState.calculateMemoryFootprint seem to give approximate values anyway, wouldn't it be an idea to keep track of the approximate cache size in the MLRUItemStateCache itself? Furthermore, getMemoryUsed even blocks read-access to the cache. A large shared cache such as the one of the SharedItemStateManager suffers significantly from this, I think. The minimum time between rebalancing seems small but, as Thomas noted, there are certain use-cases where this is needed. Isn't there a way to detect such extreme cache blowups in another way? When, for instance, a MLRUItemStateCache keeps track of its own approximate size, the time derivative of this size could be used to prevent blowups. Best wishes, Martijn > CacheManager interval between recalculation of cache sizes should be > configurable > --------------------------------------------------------------------------------- > > Key: JCR-1112 > URL: https://issues.apache.org/jira/browse/JCR-1112 > Project: Jackrabbit > Issue Type: New Feature > Components: core > Reporter: Przemo Pakulski > Assignee: Thomas Mueller > Priority: Minor > Attachments: JCR-1112.txt > > > Currently interval between recaluclation of cahce size is hard coded to 1000 > ms. Resizing/recalculation of cache size is quite expensive method > (especially getMemoryUsed on MLRUItemStateCache is time consuming) > Depending on the configuration, we realized that under some load up to 10-15% > percent of CPU time (profiler metrics) could be spend doing such > recalculations. It does not seem to be needed to resize cache every second. > Best this interval should be configurable in external config. file with other > cache settings (like memory sizes). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.