In his presentation, Avoiding
Full GCs with MemStore-Local Allocation Buffers, Todd Lipcon
describes two cases of stop-the-world garbage collections common in
HBase, especially during loading; CMS failure modes and old generation
heap fragmentation brought. To address the first, start the CMS
earlier than default by adding
-XX:CMSInitiatingOccupancyFraction
and setting it down
from defaults. Start at 60 or 70 percent (The lower you bring down the
threshold, the more GCing is done, the more CPU used). To address the
second fragmentation issue, Todd added an experimental facility,
, that
must be explicitly enabled in HBase 0.90.x (Its defaulted to be on in
0.92.x HBase). See hbase.hregion.memstore.mslab.enabled
to true in your Configuration
. See the cited
slides for background and detail[26].
For more information about GC logs, see Section 11.2.3, “JVM Garbage Collection Logs”.
[26] The latest jvms do better regards fragmentation so make sure you are running a recent release. Read down in the message, Identifying concurrent mode failures caused by fragmentation.