also check your'e GC, caused by using async without backpressuce, with the latest jdk and GC1 I've found that many time's a JVM app can become unresponsive without throwing a OOM.
running jstat -gcutil <pid> 250 would tell you, e.g if S0 or S1 stay at 100.00 then you've got a GC problem, and need to revert back to using CMS.