2

TIME_WAIT状態で接続(> 1,000)で過負荷になり続ける、Apache modプロキシを使用するかなり忙しいWebサイト(1日あたり100万ページビュー)があります。接続はポート3306(mysql)への接続ですが、mysqlはいくつかの接続(プロセスリストを表示)のみを表示し、正常に実行されています。たくさんのことを変更しようとしましたが(オン/オフを維持)、何も役に立たないようです。他のすべてのシステムリソースは妥当な範囲内にあります。

私は周りを検索しましたが、これはtcp_time_wait_intervalを変更したことを示しているようです。しかし、それは少し劇的に思えます。私は以前に忙しいウェブサイトで働いたことがありますが、この問題は一度もありませんでした。

助言がありますか?

4

3 に答える 3

5

各 time_wait 接続は、閉じられた接続です。

おそらくmysqlに接続し、クエリを発行してから切断しています。ページ上のクエリごとに繰り返します。接続プーリング ツールを使用するか、少なくともデータベース接続を保持するグローバル変数を使用することを検討してください。グローバルを使用する場合は、ページの最後で接続を閉じる必要があります。フッターインクルードのように、それを配置できる共通の場所があることを願っています。

おまけとして、ページの読み込みが速くなるはずです。MySQL はすぐに接続できますが、再接続する必要がないのでさらに高速です。

于 2009-05-02T01:01:01.160 に答える
1

クライアントアプリケーションがJDBCを使用している場合は、次のバグが発生している可能性があります。http: //bugs.mysql.com/bug.php ?id=56979 phpにも同じ問題があると思います。Cheers、Gilles。

于 2010-09-24T07:21:05.147 に答える
0

同様の問題が発生しました。phpが着信接続で逆ホストルックアップを実行するように設定されたmysqlサーバーに接続していたため、Webサーバーがすべてフリーズしました。

物事が遅いときはうまくいきましたが、負荷がかかると、応答が屋根を突き破り、すべてのapacheサーバーがtime_waitでスタックしました。

問題を特定する方法は、xdebugを使用して、高負荷のスクリプトでプロファイリングデータを作成し、それを確認することでした。mysql_connect呼び出しは、実行時間の80〜90%を占めました。

于 2009-05-02T00:23:58.907 に答える