[jboss-user] [JBossCache] - Excesive number of Timers
jorgemoralespou_2
do-not-reply at jboss.com
Mon Jul 2 05:36:43 EDT 2007
Hi,
I have JBC 1.4.1.SP3 in a JBossAS 4.2.0.
Cache configuration is this:
| <?xml version="1.0" encoding="UTF-8"?>
| <server>
| <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
| <mbean code="org.jboss.cache.TreeCache"
| name="jboss.cache:service=ServicesCache">
| <depends>jboss:service=Naming</depends>
| <depends>jboss:service=TransactionManager</depends>
| <attribute name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute>
| <attribute name="IsolationLevel">NONE</attribute>
| <attribute name="CacheMode">REPL_SYNC</attribute>
| <attribute name="UseReplQueue">false</attribute>
| <attribute name="ReplQueueInterval">0</attribute>
| <attribute name="ReplQueueMaxElements">0</attribute>
| <attribute name="ClusterName">ServicesCache-Cluster</attribute>
| <attribute name="ClusterConfig">
| <config>
| .... jgroups config .....
| </config>
| </attribute>
| <attribute name="FetchInMemoryState">true</attribute>
| <attribute name="InitialStateRetrievalTimeout">15000</attribute>
| <attribute name="SyncReplTimeout">15000</attribute>
| <attribute name="LockAcquisitionTimeout">10000</attribute>
|
| <attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
| <attribute name="EvictionPolicyConfig">
| <config>
| <attribute name="wakeUpIntervalSeconds">5</attribute>
| <region name="/_default_">
| <attribute name="maxNodes">500000</attribute>
| <attribute name="timeToLiveSeconds">86400</attribute>
| </region>
| </config>
| </attribute>
| <attribute name="UseRegionBasedMarshalling">true</attribute>
| <attribute name="InactiveOnStartup">true</attribute>
| </mbean>
| </server>
|
Later, in our application, through code we set different eviction policies for different regions, in order to keep a rational cache size ratio.
We do this to activate regions of the cache, as we deploy services that use these regions:
| public void activateRegion(String strFqn) {
| try {
| RegionManager regionManager = getServiceCacheInstance()
| .getRegionManager();
|
| if (regionManager.getRegion(strFqn) == null
| || !regionManager.getRegion(strFqn).isActive()) {
| getServiceCacheInstance().registerClassLoader(strFqn,
| Thread.currentThread().getContextClassLoader());
| getServiceCacheInstance().activateRegion(strFqn);
| log.warn("Activating synchronization of region " + strFqn);
| }
|
| } catch (RegionNameConflictException e) {
| log.error("Activating region: " + strFqn, e);
| } catch (CacheException e) {
| log.error("Activating region: " + strFqn, e);
| }
| }
|
|
We also activate/deactivate different eviction policies for these regions. Like this:
| public void activateEvictionPolicy(String strRegion, EvictionConfiguration config) {
| if (strRegion != null || "".equals(strRegion)) {
| RegionManager regionMgr = getServiceCacheInstance().getEvictionRegionManager();
| Region region;
| EvictionPolicy eviction = null;
| try {
| if (regionMgr.hasRegion(strRegion)) {
| region = regionMgr.getRegion(strRegion);
| region.setEvictionConfiguration(config);
| log.warn("Region " + strRegion + " already had an eviction policy that has been updated now");
| } else {
| eviction.configure(getServiceCacheInstance());
| regionMgr.createRegion(strRegion, eviction, config);
| log.warn("Created new region " + strRegion);
| }
| log.warn("Setting "+ evictionPolicy.getType().toString()+ " eviction policy to region " + strRegion + ". Details: " + evictionPolicy);
| } catch (org.jboss.cache.eviction.RegionNameConflictException e) {
| throw new MyCacheRuntimeException(
| "Region name conflict for " + strRegion + ". Impossible to set an eviction policy.");
| }
| } else {
| log.error("There is not any eviction policy provided for region " + strRegion);
| }
| }
|
| }
|
My problem is:
The cache gets filled with about 2000 nodes, of 10 (key/value pairs) each, and for every node, I see there is a running Timer, which never gets discarded. At the end, my app fails being unable to create more threads.
I know this can be a memory problem, but I have set 1Gb heap, 384K thead size, and have a machine with 8Gb addresable memory, so my problem seems related to the number of threads being created.
For now, I only have one eviction policy set for one region, which holds the entire 2000 nodes, and I don understand why when a node gets evicted, or when most of them gets evicted, and node number drops to only 500, timers are over 2000.
Thanks.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059546#4059546
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059546
More information about the jboss-user
mailing list