Details
Description
In RpcServer, we use callQueueSizeInBytes to avoid queuing too many calls which causes OOM. But in CallRunner.run, we decrease it before send the response back. And even after calling sendResponseIfReady, the call object could stay in our heap for a long time if we can not write out the response(That's why we need a Responder thread...). This makes it possible that the actual size of all call object in heap is larger than maxQueueSizeInBytes and causes OOM.