[
https://issues.apache.org/jira/browse/HBASE-3455?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12984552#action_12984552
]
Tatsuya Kawano commented on HBASE-3455:
---------------------------------------
Very nice report, Todd.
Here is my thought on memstore, though, this is pure assumption and I need
somebody to verify it.
1. Puts creates KeyValues, and each of them has their own *small* byte array.
2. Those KeyValues are stored in a memstore and survive for a few CMS GCs, get
promoted to the old generation.
3. The memstore eventually gets full and flushed. KeyValues and their small
byte arrays on the old generation are GCed, resulting the fragmentation.
To workaround this, we could use a *larger* (some MB?) byte array and allocate
some portion of it to each kv. (Share one big array with a number of KeyValues
instead of having small their own arrays.) When the memstore is flushed, we
can wipe the contents out and reuse the array. In this way, those byte arrays
will stay in the old generation forever and never bother the GC.
> Heap fragmentation in region server
> -----------------------------------
>
> Key: HBASE-3455
> URL: https://issues.apache.org/jira/browse/HBASE-3455
> Project: HBase
> Issue Type: Brainstorming
> Components: performance, regionserver
> Reporter: Todd Lipcon
> Priority: Critical
> Attachments: HBasefragmentation.pdf, parse-fls-statistics.py
>
>
> Stop-the-world GC pauses have long been a problem in HBase. "Concurrent mode
> failures" can usually be tuned around by setting the initiating occupancy
> fraction low, but eventually the heap becomes fragmented and a promotion
> failure occurs.
> This JIRA is to do research/experiments about the heap fragmentation issue
> and possible solutions.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.