Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-2027

HConnectionManager.HBASE_INSTANCES leaks TableServers

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.20.0
    • Fix Version/s: 0.20.3, 0.90.0
    • Component/s: None
    • Labels:
      None

      Description

      HConnectionManager.HBASE_INSTANCES is a WeakHashMap from HBaseConfiguration to TableServers. However, each TableServers has a strong reference back to the HBaseConfiguration key so they are never freed. (See note at http://java.sun.com/javase/6/docs/api/java/util/WeakHashMap.html : "Implementation note: The value objects in a WeakHashMap are held by ordinary strong references. Thus care should be taken to ensure that value objects do not strongly refer to their own keys, either directly or indirectly, since that will prevent the keys from being discarded.")

      Moreover, HBaseConfiguration implements hashCode() but not equals() so identical HBaseConfiguration objects each get their own TableServers object.

      We had a long running HBase client process that was creating new HTable() objects, each creating a new HBaseConfiguration() and thus a new TableServers object. It eventually went OOM, and gave a heap dump indicating 360 MB of data retained by HBASE_INSTANCES.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                davelatham Dave Latham
                Reporter:
                davelatham Dave Latham
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: