For a high-traffic site, I have monitoring enabled for ThreadPool, HTTP Service (and Web Container).
After some hours, the system is low on memory. Cleaning all application-specific caches showed that java.util.concurrent.ConcurrentHashMap$HashEntry is the biggest memory consumer, with about 6 million instances, consuming about 240MB memory.
Inspecting a sample of those instances showed that most of them belong to com.sun.enterprise.v3.services.impl.monitor.stats.ConnectionQueueStatsProvider.openConnectionsCount, which is a ConcurrentHashMap<Integer, Long>().
I checked this code, and it seems that connectionIds are added via @ProbeListener ("... connectionAcceptedEvent") and they are removed from the map via @ProbeListener ("... connectionClosedEvent")
The monitor-stats show that at a given moment, the CountOpenConnections = 6,600,129, the countTotalConnections = 6,600,129 and the CountTotalQueued = 7,497,644
However, there are (fortunately) only about 10 active connections at the same moment. It seems to me the connectionClosedEvent is not always generated?