Wenn mehr als 2000 Verbindungen offen sind, heißt das denn, dass auch tatsächlich 2000 Clients aktiv sind?
Gerade Java/.NET arbeiten eigentlich eher im Offline-Modus.
Die Daten werden in ein Resultset geladen, anschließend wird die Verbindung nicht mehr benötigt und sollte geschlossen werden (was bei vernünfiger Programmierung automatisch passiert).
Nun wird die Verbindung tatsächlich nicht sofort geschlossen sondern in den Connectionpool gestellt (kann man auch abschalten), so dass die Verbindung das nächste mal wiederverwendet wird.
Wenn also weniger Clients an der Maschine hängen als offene Verbindungen vorliegen (schu mal bei NETSTAT nach den IP's) ist das ganz einfach schlampig programmiert.
Es wird nicht aufgeräumt.