最近、RHEL 5.6WebサーバーをRHEL6.1に置き換えました。どちらの環境でも、Redhatで出荷された(ストック)Apache httpdが使用されています(つまり、yum install httpd)。サーバーはPHPコンテンツを提供しており、ビジーです(1分あたり約2500〜4000ページのリクエストを提供しています)。両方のサーバーの仕様は、メモリ、ストレージ、ネットワーク接続に関して同じです。 RHEL 6.1ボックスでは、負荷平均が大幅に高くなっています。負荷平均は(時々)40を超え(すべてのhttpdプロセス)に急上昇し、サイトのパフォーマンスが大幅に低下します。RHEL5.6環境と負荷平均を監視しました。この問題を調査するにはどうすればよいですか?これは実稼働環境ですが、5.6サーバーと6.1サーバーを切り替えることで「appleswithapples」を比較できることに注意してください。
1分あたり2500〜4000リクエストは、1秒あたり40〜60リクエストに相当します。この種の負荷はカーネルレベルの調整をほとんど必要としませんが、ApacheまたはPHPセットアップに問題がある可能性があります。いくつかの典型的な理由は次のとおりです。
TimeOut
値KeepAlive on
および/またはhttpd.confの長いKeepAliveTimeOut
値(余分なhttpdプロセスにつながる可能性があります)memcached
セットアップ(使用されている場合)古いサーバーと何が違うのかを理解する必要があります。古いサーバーから新しいサーバーに構成値をコピーしましたか?古いサーバーは何年も前に微調整されていて、何か重要なことを忘れていましたか?
Apacheのサーバーステータスページには何が表示されますか?
他のすべてが失敗した場合は、いつでもPHPのXDebug
モジュールを使用できます。つまり、サーバーでページの読み込みを実行し、XDebugにValgrind互換のレポートを生成させます。次に、そのファイルを KCacheGrind またはその他のアナライザーで分析し、貴重なCPU時間が消費される場所を確認できます。それはあなたに何が悪いのかについての手がかりを与えることができます。
5.6から6.1へのアップグレードは大きなステップです。おそらく、Apache、php、そしておそらくバイトコードキャッシュの両方の異なるバージョンを実行しているでしょう。
バイトコードキャッシュを使用している場合(説明している負荷の種類でそうすべきだと思います)、それが機能していることを確認する必要があります(たとえば、apcがバージョン間でいくつかの構成構文を変更したことはわかっています)。その場合、どちらを使用しますか?
IOWait、システム、またはユーザー時間の場合、どのような種類のCPU時間が費やされているかを説明するいくつかのメトリックが必要です。同じことがメモリ使用量などにも当てはまります。これらはどのように見えますか?
もう一度、Muninなどの監視ツールをお勧めします。
おそらく、両方のシステムでsysctl -A
の出力を比較できますか? RHEL5カーネルを調整した可能性があります。また、oprofileは、カーネルとプロセスが時間を費やしている場所を特定するのに役立つこともわかりました。
編集:Apacheとphpは同じように構成されていると思います。
質問:両方のApache構成は同じですか?つまり、リクエストごとにスレッド呼び出しまたはプロセス呼び出しを使用していますか?
プロセス呼び出しを使用している場合は、リクエストごとにプロセスが作成されるため(残りの数はわずかです)、負荷率が高くなります。
スレッド呼び出しを使用している場合、多くの要求は、はるかに少ない数のプロセス内のスレッドによって処理されます。
したがって、何も問題はないかもしれません。
PHPが実際に何をしているかに大きく依存しますが、IMHOの負荷平均は古いマシンでもかなり高いようですが、明らかに差し迫った問題は古いマシンと新しいマシンの動作の違いです。 。
設定が同じであると確信していますか? Apacheエラーログをチェックして、処理ディレクティブのいずれかに問題がないかどうかを確認しましたか?アクセラレータディレクトリの権限を確認しましたか?
ボックスは外部リソース(DNS、データベースなど)を使用しますか?もしそうなら、それは古いものと同じネットワーク上にありますか?他のサーバーとのRTT時間は似ていますか?
ボックスをRH5.6に簡単にダウングレードできますか?もしそうなら、これは問題を解決しますか?
帯域幅または要求応答時間(%D)に変化が見られますか?
ワーカーのメモリ要件が低いようです
違いはそれほど大きくはありません-メモリの大部分がCOWとしてマークされたTXTセグメントにあるためです。確かに いくつかのベンチマーク プレフォークがLinuxのワーカースレッドよりもスケーラブルです。