ホームページ  >  記事  >  php教程  >  Apache パフォーマンスの最適化 (6)

Apache パフォーマンスの最適化 (6)

黄舟
黄舟オリジナル
2016-12-21 11:28:371479ブラウズ

推定パラメータの例 (参考までに、必ずしも私たちの状況に適しているわけではありません):
Apache のデフォルトの最大ユーザー数は 256 です: この構成は、サーバーのメモリがまだ約 256M だった時代には非常に優れたデフォルト設定ですが、メモリ コストの急激な低下に伴い、大規模サイトのサーバーのメモリ構成は一般に当時よりも 1 桁以上高くなっています。したがって、1G メモリを搭載したマシンにとって 256 プロセスというハード制限は無駄が多すぎ、Apache のソフト上限 max_client は HARD_SERVER_LIMIT によって制限されるため、WEB サーバーのメモリが 256M を超える場合は、Apache の HARD_SERVER_LIMIT を増やす必要があります。個人的な経験によると: 2560 は、メモリが 2G 未満のほとんどのサーバーの容量計画をすでに満たしています

Apache + mod_php サーバー: Apache プロセスには通常 4M のメモリが必要です
したがって、メモリが 1G のマシンでは: apache_max_process_with_good_perfermance < ( 1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
したがって、比較的高い効率を維持するためにサービスが 500 プロセス未満で実行されるようにアプリケーションを計画し、Apache のソフト上限を 800 に設定します。
例 2:
Apache + mod_resin サーバー: Apache プロセスには通常 2M のメモリが必要です
2G メモリを備えたマシンの場合:
apache_max_process_with_good_perfermance < (2g / 2m) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000
-- prefix=/another_driver/apache/: ハードディスクはシステムの寿命が最も短いデバイスであることが多いため、Apache サービスを別のドライバー デバイスにインストールすることをお勧めします。したがって、サービス データとオペレーティング システムを完全に分離することはできません。データ アクセス速度が向上するだけでなく、さらに重要なことに、システムのアップグレード、アプリケーションのバックアップ、およびリカバリのプロセスが大幅に容易になります。
--shared-module=max: この動的ロード方法を使用してサブモジュールをロードすると、パフォーマンスが 5% 低下しますが、標準化されたインストールとメンテナンスの利点はこれよりもはるかに大きくなります。私たちのアプリケーションは比較的固定されているため、静的を使用することをお勧めします。
grep -v "#" httpd.conf.default >httpd.conf
#サービスプロセスの最大数: サービス容量の予測に従って設定
MaxClients 256 => 800
その他のApacheパフォーマンス最適化構成:
HostnameLookupsがオフ
オンになりますリクエストごとに DNS クエリが必要になるため、遅延が発生します。
オプション FollowSymLinks
最高のパフォーマンスを実現し、シンボリック リンクの保護を放棄するために、必要に応じて FollowSymLinks を設定し、SymLinksIfOwnerMatch の使用を放棄できます。
AllowOverride None
URL スペースでオーバーライドが許可されている場合 (通常は .htaccess ファイルを使用)、次に、Apache は各ファイル名コンポーネントに対して .htaccess を開こうとします。
DirectoryIndexindex.cgiindex.plindex.shtmlindex.html
ワイルドカードを使用せず、完全なリストを使用してください。 MMAP をオフにする
Apache 2.0 がサーバー側のインクルードを処理するときなど、送信されたファイルの内容を検索する必要がある場合、OS が何らかの形式の mmap(2) をサポートしている場合、ファイルに対してメモリ マッピングが実行されます。
一部のプラットフォームでは、メモリ マッピングによってパフォーマンスが向上しますが、場合によっては、メモリ マッピングによってパフォーマンスが低下し、httpd の安定性に影響を与える場合もあります。このアプリケーションでは、ファイル送信用のメモリ マッピングをオフにする方が適切です。
mod_status と ExtendedStatus Off
コンパイル時に Apache に mod_status が含まれ、実行時に ExtendedStatus On が設定されている場合、Apache はリクエストごとに gettimeofday(2) を 2 回 (オペレーティング システムによっては 2 回)、および (1.3 より前) 呼び出します。 ) ステータス レコードにタイムスタンプを付けるための追加の time(2) 呼び出しがいくつかあります。 最高のパフォーマンスを得るために、ExtendedStatus をオフに設定できます (これはデフォルトでもあります)。
TCP 接続切断パラメータを調整します。
/etc/sysctl.conf に追加します。
net.inet.tcp.msl=2000
net .inet.tcp .always_keepalive=0

上記の設定により、デフォルトで TCP 接続がキープアライブ モードで確立されなくなり、OS
リソースを消費する多数のアイドル接続が回避されます。さらに、TCP TIME_WAIT の待機時間も長くなります。 60秒から4秒に短縮されました。
UFS dirhash によって許可されるメモリ使用量を調整します
vfs.ufs.dirhash_maxmem=67108864 (この設定は 5.3p14 に自動的に含まれます)

この設定は、OS のデフォルト値を 32 倍に増加します。
Apache 設定で KeepAlive を無効にします:
/usr/local/etc/apache2/httpd.conf を編集し、
KeepAlive On

KeepAlive Off
に変更します。 負荷が高いサーバーでは、上記の設定は同時に httpd に接続します。接続数は約 2200 から 400
以下に減少しました。そして、応答時間を効果的に改善します。上記の設定は、これまでに一部のマシンに適用されています(約 3 週間)。これまでのところ、これらの設定によってユーザーが認識できるような悪影響は発生せず、サービスの応答時間も向上することが基本的に確認されています。したがって、上記の設定をすべてオンラインでシステムに適用することをお勧めします。
具体的な技術詳細
現在オンラインになっているすべての FreeBSD 5.3 バージョン (パッチレベルに関係なく) は SINAIL カーネルに統合されています
ACCF_HTTP の機能は、HTTP リクエストが完了した後にクライアントからアプリケーションに送信することにより、クライアント ネットワークが遅いために httpd が途中で接続の待機を開始することによるリソースの消費を削減します。
KeepAlive を無効にすると、クライアントは複数のリソースをリクエストするときに同時リクエストを行う可能性が高くなります。そのため、リンク上のパケットロスなどによる遅延が他のリソースをダウンロードする際の影響が弱まります。
TCP フラグメンテーション タイムアウトを短縮すると、接続が閉じられるまでの待機時間が短縮され、確立された接続がより安定します。
dirhash のデフォルトの最大メモリは 2MB です。現在実稼働システムで得られる実際の使用量は、通常約 16 ~ 20MB です。拡張すると、同じディレクトリ内のファイルへのアクセスパフォーマンスが向上します。

簡単なパフォーマンス テスト: (最適な最適化パラメーターを見つけるために、さまざまな構成パラメーターを個別にテストすることをお勧めします)
自分でテストする必要がある場合は、Apache 独自の ab を使用してテストしてください。
[yangbin1@vHost-RH9 apache]$ ./bin/ab -n 10000 -c 100 http://10.210.128.189:7981/
これは ApacheBench、バージョン 2.0.40-dev <$Revision: 1.121.2.8 です。 $> apache-2.0
著作権 (c) 1996 Adam Twiss、Zeus Technology Ltd、http://www.zeustech.net/
著作権 (c) 1998-2002 The Apache Software Foundation、http://www.apache. org/
ベンチマーク 10.210.128.189 (お待ちください)
1000 リクエストを完了しました
2000 リクエストを完了しました
3000 リクエストを完了しました
4000 リクエストを完了しました
5000 リクエストを完了しました
6000 リクエストを完了しました
7000 リクエストを完了しました
8 を完了しましたリクエスト 000 件
リクエスト 9000 件完了
リクエスト 10000 件完了リクエスト

サーバー ソフトウェア: Apache/2.0.49
サーバーホスト名: 10.210.128.189

サーバーポート: 7981

ドキュメントパス: 456 バイト
同時実行レベル: 100
テストにかかった時間: 20.756253 秒
完了したリクエスト数: 10000
失敗したリクエスト: 0
書き込みエラー: 0
合計転送数: 19192048 バイト
HTML 転送: 14653184 バイト
1 秒あたりのリクエスト数: 481.78 [#/sec ] (平均)
リクエストあたりの時間: 207.563 [ms] (平均)
リクエストあたりの時間: 2.076 [ms] (すべての同時リクエストの平均)
転送速度: 902.96 [Kbytes/sec] 受信
接続時間 (ms)
最小平均[+/-sd] 中央値最大
接続: 0 78 60.7 99 554
処理中: 20 125 57.8 114 1149
待機中: 5 111 53.2 104 869
合計: 47 204 84.4 214 1303
一定時間内に処理されたリクエストの割合(ms)
50% 214
66% 218
75% 220
80% 223
90% 264
95% 302
98% 447
99% 530
100% 1303 (最長リクエスト)
テスト結果分析: まだありません。

上記は Apache パフォーマンスの最適化 (6) の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。