Which database driver(s) are you using? Are you using threads, ORM, and/or cftransaction’s?
We have had similar issues over several versions. See PostgreSQL DB connections not being released with 42.7.5 JDBC driver. We found some of it was due to database related code in long running requests or in threads that end up with hung / unclosed connections, some of it due to a specific JDBC driver for PostgreSQL, and some due to external long queries / materialized view updates creating long locks / timeouts of Lucee code.
Between upgrading to latest release candidate, updating our PostgreSQL JDBC driver to latest version, and some refactoring of our code, we’ve eliminated 99.99% of the issue. In addition to what Charlie said, looking at these areas might point you to root cause. Unless tens/hundred of thousands of visitors are hitting your site at the exact same second / minute, it would be unlikely to be the source. Most likely some code that is causing abandoned / hung connections.