Uploaded image for project: 'OFBiz'
  1. OFBiz
  2. OFBIZ-2186

OutOfMemory provoked by Cache overflow

    Details

    • Type: Bug
    • Status: Closed
    • Priority: 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

        Attachments

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

          Issue Links

            Activity

              People

              • Assignee:
                jacques.le.roux Jacques Le Roux
                Reporter:
                p.mouawad@ubik-ingenierie.com Philippe Mouawad
              • Votes:
                4 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: