答えは、[mysqld] の下の my.cnf に次のエントリを追加することのようです:
wait_timeout=60
interactive_timeout=60
ここで見つけました(一番下にあります): http://community.livejournal.com/mysql/82879.html
古い接続を強制終了するデフォルトの待機時間は 22800 秒です。確認するには:
mysql> show variables like 'wait_%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 60 |
+---------------+-------+
編集:言い忘れましたが、/etc/sysctl.conf に以下を追加しました:
net.ipv4.tcp_fin_timeout = 15
これは、接続リソースを再利用する前に OS が待機するしきい値を下げるのに役立つはずです。
編集 2:/etc/init.d/mysql reload は実際には my.cnf をリロードしません (以下のリンクを参照)
接続プールが不適切に構成されて、あまりにも多くの接続を保持し、保持しているアイドル プロセスが多すぎる可能性があります。
それを除けば、コードの一部が結果セットを保持しているということしか考えられませんが、その可能性は低いようです。タイムアウトしているスロー クエリを検出するには、conf ファイルのスロー クエリ ログに書き込むように MySQL を設定することもできます。これにより、X 秒より長い時間がかかるすべてのクエリが書き込まれます。デフォルトは 10 秒です。