2

ロードが完了する前に Web ページが繰り返し更新されると、MySQL 接続が閉じられず、最終的に 150 プロセスを超えると「Too many connections error」がスローされます。

私は永続的な接続を使用しておらずmysql_close()、スクリプトの最後に.

どうすればこれを防ぐことができますか? 以前に使用したサーバーでこれを経験したことはありません。

サイトを安定させるために、毎分 120 秒以上経過した古いプロセスを強制終了する PHP スクリプトを作成しました。これは役に立ちますが、自分のサイトにより多くのトラフィックを送信すると効果がありません。

4

2 に答える 2

2

これは、データベースが時間内にすべてのリクエストを処理できないようです。

ユーザーが Web サイトにアクセスすると、スクリプトがデータベース サーバーへの接続を確立し、クエリが実行され、結果が取得されて表示され、データベース サーバーへの接続が閉じられます。

クエリが多すぎるか、クエリの実行に時間がかかりすぎると、サーバーが爆発するまでキューが大きくなり、大きくなります。

あなたは古いプロセスを強制終了したと言いました-それらは古くはなく、単にまだ完了していません。おそらく、リクエストしているWebサーバープロセスはすでにタイムアウトしています

できること:

  • データベース構造を最適化する
  • クエリを最適化する
  • ハードウェアをスケールする (スケールアップするか、できればスケールアウトする)
  • キャッシュを使用する
  • サーバー設定を最適化する

最も単純で時間がかからず、非常に効果的な改善は、おそらく出力キャッシュです。

ホット サイトの html 出力を安全に保管し、キャッシュの有効期限が切れてキャッシュが更新されるまで直接配信します。

Nginx はこれを行うことができます。

http://dangerousprototypes.com/docs/NGINX_reverse_proxy_in_front_of_Apache:_hardened,_high_performance_dedicated_server_setup

ウェブサイトのアーキテクチャや使用しているソフトウェア スタックに関する詳細情報を提供していただければ、より詳細なヘルプを得ることができます。

于 2013-01-09T00:09:27.600 に答える
0

データを取得したら、接続を閉じる必要があります。Web ページはステートレスであるため、データベースへの常時接続は必要ありません。自動ポストバックが発生したときに接続を開き、再度閉じます。データをデータテーブル コンテナーに格納してから処理します。Web ページを開発している言語は何ですか?

于 2013-01-08T23:23:49.107 に答える