Currently, Spark use `PooledByteBufAllocator` to allocate memory for channel reading. However, the allocated heap/offheap memory size is not tracked. Sometimes, this make it difficult to find out the cause of OOM failures(for instance, direct memory oom). we have to dump the heap and use more advanced tools like MAT to locate the cause.
Actually, we can add some logs for `PooledByteBufAllocator` when allocating large memory, which can facilitate the debugging.