La réponse semble être d'ajouter les entrées suivantes dans my.cnf sous [mysqld] :
wait_timeout=60
interactive_timeout=60
Je l'ai trouvé ici (tout en bas) :http://community.livejournal.com/mysql/82879.html
Le temps d'attente par défaut pour couper une connexion obsolète est de 22 800 secondes. Pour vérifier :
mysql> show variables like 'wait_%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 60 |
+---------------+-------+
EDIT :j'ai oublié de mentionner, j'ai également ajouté ce qui suit à mon /etc/sysctl.conf :
net.ipv4.tcp_fin_timeout = 15
Ceci est censé aider à réduire le seuil que le système d'exploitation attend avant de réutiliser les ressources de connexion.
EDIT 2 :/etc/init.d/mysql reload ne rechargera pas vraiment votre my.cnf (voir le lien ci-dessous)
Il est possible que le ou les pools de connexions soient mal configurés pour conserver trop de connexions et qu'ils conservent trop de processus inactifs.
En dehors de cela, tout ce à quoi je peux penser, c'est qu'un morceau de code conserve un ensemble de résultats, mais cela semble moins probable. Pour détecter s'il s'agit d'une requête lente qui expire, vous pouvez également configurer MySQL pour qu'il écrive dans un journal des requêtes lentes dans le fichier conf, et il écrira alors toutes les requêtes qui prennent plus de X secondes, la valeur par défaut est de 10 secondes.