[
https://issues.apache.org/jira/browse/HBASE-15525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Anoop Sam John updated HBASE-15525:
-----------------------------------
Resolution: Fixed
Hadoop Flags: Reviewed
Release Note:
Added a new ByteBufferPool which pools N ByteBuffers. By default it makes off
heap ByteBuffers when getBuffer() is called. The size of each buffer defaults
to 64KB. This can be configured using
'hbase.ipc.server.reservoir.initial.buffer.size'. The max number of buffers
which can be pooled defaults to twice the number of handler threads in RS. This
can be configured with key 'hbase.ipc.server.reservoir.initial.max'. While
responding to read requests and client support Codec, we will create CellBlocks
and directly return it as PB payload. For making this block, we will use N
ByteBuffers from pool as per the total size of the response cells. The default
size of 64 KB for the buffer is inline with the number of bytes written to RPC
layer in one short.(That is also 64KB). When at point of time, the calle not
able to get a free buffer from the pool (it returns null then), it will make on
heap Buffer of same size (as that of Buffers in pool) and use that to create
cell block.
Status: Resolved (was: Patch Available)
Pushed to master. Thanks for finding the issue and testing in the cluster
[~dvdreddy]. Thanks all for the reviews.
I fixed the white space issue on commit.
> OutOfMemory could occur when using BoundedByteBufferPool during RPC bursts
> --------------------------------------------------------------------------
>
> Key: HBASE-15525
> URL: https://issues.apache.org/jira/browse/HBASE-15525
> Project: HBase
> Issue Type: Sub-task
> Components: IPC/RPC
> Reporter: deepankar
> Assignee: Anoop Sam John
> Priority: Critical
> Fix For: 2.0.0
>
> Attachments: HBASE-15525_V1.patch, HBASE-15525_V2.patch,
> HBASE-15525_V3.patch, HBASE-15525_V4.patch, HBASE-15525_V5.patch,
> HBASE-15525_V6.patch, HBASE-15525_WIP.patch, WIP.patch
>
>
> After HBASE-13819 the system some times run out of direct memory whenever
> there is some network congestion or some client side issues.
> This was because of pending RPCs in the RPCServer$Connection.responseQueue
> and since all the responses in this queue hold a buffer for cellblock from
> BoundedByteBufferPool this could takeup a lot of memory if the
> BoundedByteBufferPool's moving average settles down towards a higher value
> See the discussion here
> [HBASE-13819-comment|https://issues.apache.org/jira/browse/HBASE-13819?focusedCommentId=15207822&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15207822]
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)