OFBiz
  1. OFBiz
  2. OFBIZ-2186

OutOfMemory provoked by Cache overflow

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: Release Branch 4.0, Trunk
    • Fix Version/s: Release Branch 09.04, Trunk
    • Component/s: framework
    • Labels:
      None
    • Environment:

      Linux, JDK 1.5_15, Xmx set to 1156Mo

      Description

      In our production system, we had an OutOfMemoryError.
      I analyzed the generated Heap Dump and found the following:
      The cache entitycache.entity-list.default.ProductCategoryMember retains a heap of 369314128 Bytes.
      The LRUMap hold by this object is occupying this space (369314128) and this object has a stange state:

      • maxSize is set to 5000 (as set in the cache.properties)
      • size is 128930 => PROBLEM

      IN cache.properties:
      entitycache.entity-list.default.ProductCategoryMember.expireTime=3600000
      entitycache.entity-list.default.ProductCategoryMember.useSoftReference=true
      entitycache.entity-list.default.ProductCategoryMember.maxInMemory=5000
      entitycache.entity-list.default.ProductCategoryMember.maxSize=7500

      I analyzed the code of LRUMap and its usage in CacheLineTable and IMHO the bug is a missing synchonized in get():
      public CacheLine<V> get(Object key) {
      if (key == null)

      { if (Debug.verboseOn()) Debug.logVerbose("In CacheLineTable tried to get with null key, using NullObject" + this.cacheName, module); }

      return getNoCheck(key);
      }

      Since LRUMap extends LinkedHashMap, if you look at get method, it changes the state of the Map by calling e.recordAccess(this):
      public V get(Object key)

      { Entry<K,V> e = (Entry<K,V>)getEntry(key); if (e == null) return null; e.recordAccess(this); return e.value; }

      So the default of synchronization corrupts the state of LRUMap which grows indefinitely
      I will submit a patch for this on the trunk.
      Philippe
      www.ubik-ingenierie.com

      1. OfbizBug.zip
        241 kB
        Philippe Mouawad
      2. CacheLineTable-patch.txt
        0.6 kB
        Philippe Mouawad

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Jacques Le Roux
              Reporter:
              Philippe Mouawad
            • Votes:
              4 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development