Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-15880

Memory leak in CompressedChunkReader

    XMLWordPrintableJSON

    Details

      Description

      CompressedChunkReader uses java.lang.ThreadLocal to reuse ByteBuffer for compressed data. ByteBuffers leak due to peculiar ThreadLocal quality.
      ThreadLocals are stored in a map, where the key is a weak reference to a ThreadLocal and the value is the user's object (ByteBuffer in this case). When a last strong reference to a ThreadLocal is lost, weak reference to ThreadLocal (key) is removed but the value (ByteBuffer) is kept until cleaned by ThreadLocal heuristic expunge mechanism. See ThreadLocal's "stale entries" for details.

      When a number of long-living threads is high enough this results in thousands of ByteBuffers stored as stale entries in ThreadLocals. In a not-so-lucky scenario we get OutOfMemoryException.

        Attachments

          Activity

            People

            • Assignee:
              bereng Berenguer Blasi
              Reporter:
              jtgrabowski Jaroslaw Grabowski
              Authors:
              Berenguer Blasi
              Reviewers:
              Benjamin Lerer, Branimir Lambov
            • Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 6.5h
                6.5h