6

LAMP アプリケーションを正常に実行していますが、ユーザー数は毎日増加しています。ある朝、驚きに見舞われて、過負荷のためにすべてが壊れたことに気付きたくありません。LAMP の容量を概算する方法はありますか?

完全に詳細なレポートは何冊もの本を読む価値があることは承知していますが、問題なく動作しているかどうかを確認するための簡単なリトマス試験紙を入手できますか。

たとえば、mysql コンポーネントの場合、どのくらいの負荷がかかるかをどのように判断できますか? 容量が 30% か、50% か。等

私のApacheも同じです。私はDBがapacheの前に死ぬと感じていますが。


英語は私の母国語ではないので、おそらく私のオリジナルはあまり良くありませんでした. 私が本当に求めているのは、現在の負荷を測定する方法です。そして、その負荷に基づいて、失敗する前にどれだけ先に進むことができるかを見積もる方法があります。(そして、これはコンポーネント、mysqld、httpd ごとに個別に行う必要があります)

4

2 に答える 2

5

サイトが Cookie などを必要とする場合、ab は少し面倒です。ab は単純すぎます。

基本的に、いくつかの内破した PHP Web サイトを修正した経験から、通常は次のようになります。

1) 人々は MySQL を使用しています

MySQL、facebook、flickr を完全に使用できます (mysql ファンボーイはこれらが大好きです)。

  • 読み取り専用でない MyISAM テーブルと 100 us を超えるクエリ (select を含む) がある場合、あなたは死んでいます

私が修正したあるサイトでは、「彼のサイトにはパワーが必要だ」という理由で、その男はダブル クアッド コア サーバーをレンタルしていました。彼のサイトを見て、メンバー数が 10 万人を超える前のサイトと、Via C7 マイクロハーフピザボックス サーバーで実行されているトレント トラッカーを見て、あなたのサイトは私の地下室にある Celeron 300 で正常に実行されていることを彼に伝えます。 、それはやり過ぎです。Xeon の半額でレンタルできます (笑)。

その男は優れた開発者であり、本当にナイスガイであることが判明しましたが、彼は MySQL が苦手だったので、彼のサイトには典型的な検索クエリ フロム ヘルがあり、どんな Web サイトも殺すことができました。

  • 毎秒 10 件の検索クエリ (彼の違法ウェアーズ サイトには 30 万人のメンバーがいた)
  • 地獄からの検索クエリは約 0.1 ~ 0.2 秒かかります
  • 物事を盛り上げるために、同じ MyISAM テーブルへの同時更新の小さなストリーム

=> すべてのクエリの総シリアライゼーション (MyISAM 書き込みロック)。1 コア 100%、アイドル状態の 7 コア、loadavg > 1000 (はい、彼は apache を使用していました)、ページ時間 > 30 秒、動作します。

修正は簡単でした。検索クエリを地獄から最適化し、以下のポイント 2) を修正し、InnoDB に切り替え、lighttpd に切り替えます。loadavg が 0.02 に低下

2) 更新

ページカウンターには誰も興味がありません。すべてのページ ビューに対して 1 回の UPDATE を発行すると、あなたは死んでしまいます。MyISAM を追加して、さらに効果を高めます。また、ロックではなく、同期ディスク IO 待機に関する InnoDB のキラーです。

3) 全文

  • ロックのため、MyISAM は読み取り/書き込みテーブルには使用できません。
  • MyISAM は ramdisk と同じくらい信頼性があります (実際には、より少ない : RAM ディスクを破損するために OS クラッシュが必要です。MyISAM テーブルを破損するには、MySQL クラッシュが必要です。または同時にヒットしすぎると、「不明なテーブル エンジン エラー」が発生します。何度も見ました)
  • FULLTEXT は InnoDB では利用できません
  • FULLTEXT インデックスに挿入すると、ほぼ完全なインデックスの再構築がトリガーされます (フォーラムの投稿を挿入すると、400 MB のインデックスが再構築されました)。

==> 全文索引付け、パフォーマンス、および信頼性が必要な場合は、Sphinx または Xapian を使用してください。

私は Sphinx を試したことはありませんが (人々はそれについて良いことを言っています)、Xapian は 4GB のテキストを簡単に検索できます。

4) 人々は apache を使用します。

これは、上記のポイントとうまく組み合わされます。

CPU 使用率が検出できない lighttpd のような適切なサーバーとは異なり (C7 経由で 100 HTTP ヒット/秒を処​​理し、lighttpd は 1% 未満の CPU を使用していました)、apache はボックスを強制終了します。

MySQL が停止し始めると (簡単に停止します)、クライアントが F5 キーを強く押し始め、すぐに約 1000 の apache プロセスができ、それぞれが PHP インタープリターを保持し、各 PHP インタープリターはアイドル状態の MySQL 接続を保持し、MyISAM ロックを待機します。 1つを除いて、ページビューカウンターの些細なUPDATEを行っていますが、サーバーが1000のapacheと1000のphpと1000のmysqlプロセスのためにランチスワッピングに移行しているため、時間がかかります。

Lighttpd は静的ページに CPU を使用しません。lighttpd が CPU を飽和状態にする唯一の方法は、apachebench で 20K リクエスト/秒のようにハードヒットする場合です。次に、Lighttpd は、少数の MySQL 接続と通信する 10 個の php-fcgi バックエンド (コアごとに 2 ~ 4 個が適切) などのいくつかと通信します。その結果、すべてがはるかに高速になり、過負荷になると、爆発的にではなく、優雅に劣化します.

元の質問にたどり着くには、間違いなく SQL クエリをプロファイリングする必要があります。クエリ ログを PHP アプリケーションに追加すると、クエリのリストと所要時間、および PHP スクリプトの開始から終了までの時間が表示されます (ヘッダー/フッター インクルードは適切な場所です)。これ)。

複雑なページ (検索を除く) の場合、約 3 ミリ秒の MySQL と 3 ミリ秒の PHP が予想されます。これは適切なターゲットです。もちろん、PHP でコンパイルされたコード キャッシュが必要です。

于 2009-09-30T17:07:20.790 に答える
4

現在の負荷については、できることがいくつかあります。最も高価でありながら最も詳細な回答は、「Gomez」などのエンタープライズアプリケーションを通じて提供されます。

ただし、これを自分で行う場合は、以下の以前の回答を参照するか、htop、top、wなどのシェルユーティリティを使用して、Apacheserver-statusを利用してください。

質問改訂前の以前の回答:

あなたが求めているのは、アプリケーションプロファイリングと呼ばれることもあります。

次のような大まかなメモリ式を作成する必要があります。

httpd ram+phpメモリ使用量+mysqlプロセス使用量=合計リクエストメモリフットプリント

CPUフォーミュラも必要になりますが、負荷テスト中に目玉を付けることもできます。

Apacheにはコマンド「ab」があります。

「abは、Apacheハイパーテキスト転送プロトコル(HTTP)サーバーのベンチマークを行うためのツールです。これは、現在のApacheインストールのパフォーマンスを示すように設計されています。これは特に、Apacheインストールが処理できる1秒あたりのリクエスト数を示します。 「」http://httpd.apache.org/docs/2.0/programs/ab.html

一般的な「ab」ベンチマークコマンドラインは次のとおりです。

ab -n 10 -c 1 http://www.yoursite.com/
# qty 10 total requests, 1 request at a time

戦略は、Webページの要求から完了までのアプリケーションのプロセス(ユーザー)ごとの負荷をテストすることです。Apache、PHP、およびMySQLが各リクエストに使用するRAMの量を特定できれば、システム容量をすばやく特定できます。

おそらく、vmstat、top、iostat、psなどの診断ツールを組み合わせて使用​​して、システムに要求される多数の要求のスナップショットを作成する必要があります。

最後に、Xdebugをインストールします。このツールは、アプリケーションのphp側のプロファイルを作成するのに役立ちます。 http://xdebug.org/

Xdebugのインストールに関するIBMのチュートリアルは次のとおりです。

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/

于 2009-09-30T16:03:30.350 に答える