
社内でホストされている現在のウェブサーバーを最適化する方法を探しています。できるだけ多くの情報を提供しようとしています。関連する詳細は下記をご覧ください。サポートのために追加情報が必要な場合はお知らせください。
サーバーは、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
使用中のプロセスを監視するには、モジュールをオンにします。内部からのみアクセスできるようにアクセス ルールを設定してください。