MySQL default wait_timeout is 28800 but in my server I can see more than that value
Ah! This one could be application framework has the value passed at the time of creating connection to DBs to set wait_timeout or interactive_timeout for their session level, this overrides default mysql settings.

If you enable general log on any test environment and have their application to point to that DB. You will find wait_timeout or interactive_timeout setting such values.

Short Term Fix:


You might consider killing connections that are more than 500secs in sleep state as a cron running every minute.


Permenant Fix:


Have application team to fix their code, by not to pass any default values to DB.
Once app is fixed, remove the cron that kills every minute.