The application not closing the connection may have an effect, because this 'leaks' from the pool,
which may then have to make more. If you cannot fix the app, at least set a idle-connection-timeout
for the pool, so it can retract connections that your app has reserved but not used for that long.
As to one server showing 4 while the others 100, that is a higher-than-JDBC issue, asking why
user load was not sent to that node. JDBC just supplies a connection from the local instance
of the pool if/when the work is being done on a node.