Adds trace logging for java non blocking server memory limit
Client: java
Patch: Keith Turner
Co-authored-by: Christopher Tubbs

This closes #3135
diff --git a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
index 2bcd4b2..af2bc63 100644
--- a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
+++ b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
@@ -319,6 +319,14 @@
     }
 
     /**
+     * @return the amount of memory currently used to read data from clients. This information can
+     *     be useful for debugging, metrics, and configuring the maximum memory limit.
+     */
+    public final long getReadBufferBytesAllocated() {
+      return readBufferBytesAllocated.get();
+    }
+
+    /**
      * Give this FrameBuffer a chance to read. The selector loop should have received a read event
      * for this FrameBuffer.
      *
@@ -358,7 +366,13 @@
 
           // if this frame will push us over the memory limit, then return.
           // with luck, more memory will free up the next time around.
-          if (readBufferBytesAllocated.get() + frameSize > MAX_READ_BUFFER_BYTES) {
+          long currentAllocated = getReadBufferBytesAllocated();
+          if (currentAllocated + frameSize > MAX_READ_BUFFER_BYTES) {
+            LOGGER.trace(
+                "Deferring reading frame of size {} because {} is already buffered and {} is the limit.",
+                frameSize,
+                currentAllocated,
+                MAX_READ_BUFFER_BYTES);
             return true;
           }