I just ran a quick test with your simulation (from OSX, you I couldn't properly raise the fd limit and quickly ran out of fd).
Anyway, after 30 seconds, I has ~600 concurrent active users, and response time was already very bad.
I think you're quickly way past the limits of your system under test, but you keep on throwing new virtual users at it.
As virtual users take forever to complete the full scenario and exit, they just pile up in memory.
At some point, you end up with a full non-GCable heap, and GC keeps on being triggered but not being able to free anything, cause the JVM to freeze.
).