Apacheのパフォーマンスを最適化する

Apacheのパフォーマンスを最適化する

社内でホストされている現在のウェブサーバーを最適化する方法を探しています。できるだけ多くの情報を提供しようとしています。関連する詳細は下記をご覧ください。サポートのために追加情報が必要な場合はお知らせください。

サーバーは、Zend Framework (ver1) 上に構築されたオンライン ピザ注文プラットフォームである 1 つの Web サイトを実行しています。先月のトラフィック統計では、1 日あたり約 6,000 ページの読み込みがあり、主に夕食時に集中しています。その期間のピークは、1 時間あたり約 1,500 の読み込みです。

最近、2/2 メガビットの aDSL 回線から 100/100 メガビットの光ファイバーにアップグレードしましたが、夕食時にパフォーマンスの問題がまだあります。2 メガビットが問題だと考えました。Web サイトは、負荷が低い時間帯には非常に高速です。

ハードウェア

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

サーバーOS

FreeBSD 8.2-RELEASE

ソフトウェア

apache-2.2.17
php5-5.3.8
mysql-server-5.5

Apache の足跡(例、# 上から抜粋)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

Apache は、prefork MPM、APC (Alternative PHP Cache) を使用しています。SSL モジュールはロードされていますが、使用されていません (実際には機能しないため、使用されていません)。MPM モジュールの設定を含むファイルがありますが、httpd.conf ファイルに含まれておらず、include 行がコメント アウトされていることがわかります。したがって、prefork MPM もデフォルト値で動作していると思われます。

私が見つけた他のApache conf値はhttps.confに含まれています。

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

パフォーマンスの問題が発生した場合のロード

ここに画像の説明を入力してください

注: バックエンドへのAPIリクエスト

オンライン プラットフォームについては、API (GET/POST) を介してバックエンド システムと通信します。バスケットの価格見積もり (新しいアイテムが追加されるまでキャッシュ)、製品 (キャッシュ)、製品の価格 (キャッシュ) などです。また、Web でパフォーマンスの問題が発生すると、バックエンド サーバーは実際に負荷を示しています。そのため、API 要求が完了するまでに時間がかかり、Web サーバーでクライアントが待機しているのではないかと疑っています。そこで質問ですが、上記の統計 (トラフィック/負荷) とソフトウェアの現在の構成は、インターネット接続とハードウェアの仕様と比較して、サーバーの負荷が高いことを示していますか? また、使用可能なリソースと Apache の実際のフットプリントに基づいて、Web サーバー上のクライアントの最大数を増やすことはできますか?

答え1

Web サイトのパフォーマンスは大きな問題です。私の見るところ、問題は Apache ではない可能性が高いです。

ただし、パフォーマンスを向上させるのに役立つものがいくつかあります。

  • キャッシュ!PHPコードでどのくらいキャッシュされているかはわかりませんが、SSLを使用しておらず、読み取り専用データがたくさんあると思われるので、試してみてください。ワニス

  • 有効にするmod_expires

  • ウェブサイト/バックエンドAPIをプロファイルするJメーター

答え2

いいえ、上記はサーバーのストレスの兆候ではありません。

ネットワーク I/O の飽和が発生している可能性はありますが (実際のデータは提供されていないため)、ピーク時に発生する実際のリクエストが非常に少ないため、これが発生する可能性は極めて低いです。

HTTP バックエンドでいくつかのテストを実行して、最大容量で実行されているかどうかを確認する必要があります。最大容量で実行されている場合は、それを修正する必要があります。

今後の参考のために、サーバーステータスApache を監視するためのハンドラーについては、次のドキュメントを参照してください。2.2 の mod は、以下のとおりです。

答え3

Apacheのパフォーマンスは、Worker MPMとPrefork設定で調整できます。keepaliveとmax swap threadsを変更すると、パフォーマンスが向上し、メモリ使用量が削減されます。Preforkとworkerの最適な設定は、以下から見つけることができます。ここ

答え4

プロセスが不足している可能性があります (MaxSpareServersおよびで定義されますStartServers)。デフォルトは 10 のみなので、応答時間が長い場合は、2 秒ごとに 1 つのリクエスト (1500 / 時間) では不十分な場合があります。

server-status使用中のプロセスを監視するには、モジュールをオンにします。内部からのみアクセスできるようにアクセス ルールを設定してください。

関連情報