I guess you have seen this call directly below the following code snippet:
checkForErrors();
I think checking thrown should be kept in the condition.
I assume we can lift the above call before dataAvailable.notifyAll()
My 2 cents.
On Wed, Jun 22, 2011 at 7:00 PM, Gaojinchao <[email protected]> wrote:
>
> Because Master usually<javascript:void(0)> uses little memory. So its
> memory is 4G.
>
> DFS block is 256M and hbase.regionserver.maxlogs is 32. One region server
> can save max 8G Hlog.
>
> In my performance cluster(0.90.3), The Hmaster memory from 100 M up to 4G
> when one region server crashed.
>
> I dug it and found the flow control does not work when write thread is
> normal.
>
>
> // If we crossed the chunk threshold, wait for more space to be available
> synchronized (dataAvailable) {
> while (totalBuffered > maxHeapUsage && thrown == null) {
> LOG.debug("Used " + totalBuffered + " bytes of buffered edits,
> waiting for IO threads...");
> dataAvailable.wait(3000);
> }
> dataAvailable.notifyAll();
> }
>
> If the code is below. It seems better.
>
> // If we crossed the chunk threshold, wait for more space to be available
> synchronized (dataAvailable) {
> while (totalBuffered > maxHeapUsage) {
> LOG.debug("Used " + totalBuffered + " bytes of buffered edits,
> waiting for IO threads...");
> dataAvailable.wait(3000);
> }
> dataAvailable.notifyAll();
> }
>
>
>
>