'接続数が多すぎる'エラーの場合、service httpd restart/reload
、既存のMySQL接続を解放しますか?
Apacheを再起動するときに、ApacheがDB接続を閉じても、mysqldに通知しない可能性はありますか。
注:mysqldのwait_timeout = 8時間です。
簡単な答えは「はい」ですが、直接ではありません。いずれにせよ、MySQLwait_timeout
を30秒などのより現実的なものに短縮することを検討します。
ApacheはWebサーバーであり、HTTP接続要求を受け入れ、コンテンツをクライアントに返します。MySQLデータベースにネイティブに接続することはできません。
接続の最も可能性の高いソースは、これらのリクエストへの応答を生成するアプリケーション、つまりPHP、Java、Pythonなどです。質問にphp
のタグを付けたので、PHPここに。
ここで、PHP-FPMではなくApacheのmod_phpを使用すると仮定すると、PHPプロセスはApacheによってフォークされるため、Apacheを再起動すると、これらのプロセスは強制終了され、再生成されます。PHPを実行している場合-FPM、Apacheを再起動しても、FPMは独自のデーモンとして実行されるため、PHPプロセスは強制終了されません。
PHPプロセスがmod_phpを介して強制終了された場合、接続を直接閉じるためにmysql_close()
を呼び出さないため、接続はwait_timeout
秒間開いたままになります。
service httpd graceful
またはapachectl -k graceful
を使用して、Apacheに「正常な」再起動を実行し、終了前に既存のスレッドを終了できるようにすることができます。
ただし、PHPコードがmysql_close()
を介して接続を閉じていない場合、それが問題の最終的な原因となり、任意の方法でApacheを再起動しても問題は解決しません。
また、restart
とreload
の重要な違いは、前者はプロセスを終了し、後者は単に構成を再読み込みすることです。本当にプロセスを終了したい場合は、restart
を使用してください。