I'd like to suggest an alternative implementation.  First, the name of the pool is more useful than the socket address, since the name will include the address but may have additional detail and is designed to be useful for reporting purposes.  Second, it's better not to let references to the pool escape from the ChannelPoolManager since the pool could be inadvertently shut down, etc.  So why not gather the stats in this method, and change its signature to

public Map<String,AsyncPoolStats> getPoolStats()

Then it need only iterate through the pools and call getStats() on each.