データセンターの同じラック(ロードバランサーの背後)で2台の Dell R41 サーバーを実行しています。どちらも同じハードウェア構成で、Ubuntu 10.4を実行し、同じパッケージをインストールして同じJava Webサーバー(他の負荷なし)を実行します。2つの間に大幅なパフォーマンスの違いが見られます。
パフォーマンスの違いは、両方のサーバーの平均応答時間で最も明白です(Javaアプリ自体、ネットワーク遅延なしで測定):一方は他方よりも20〜30%高速です。一貫して。dstat
を使用して、コンテキストスイッチ、IO、スワッピングなどが他にもあるかどうかを判断しましたが、違いの理由はわかりません。同じワークロード(スワッピングなし、実質的にIOなし)では、CPU使用率と負荷は1台のサーバーで高くなります。
したがって、違いは主にCPUに依存しているように見えますが、sysbench
を使用した単純なcpuベンチマーク(他のすべての負荷をオフにした状態)では違いが生じましたが、わずか6%でした。つまり、CPUだけでなくメモリのパフォーマンスでもあるのかもしれません。
これまでに確認しました:
dmidecode
を使用してダンプを実行しましたが、違いはありませんでした)/proc/cpuinfo
を比較しましたが、違いはありません。cpufreq-info
の出力を比較しましたが、違いはありません。また、数か月前にRAMを完全に置き換えましたが、効果はありませんでした。
迷っています。何が起こっているのかを理解するために私は何ができますか?
[〜#〜]更新[〜#〜]:イェーイ!現在、両方のサーバーのパフォーマンスは同等です。コメントでjim_m_somewhereが名前を付けたので、これは「powerCRAP」設定でした。 「電源管理」のBIOSオプションは、高速サーバーの「最大パフォーマンス」と、もう一方の「アクティブ電源コントローラー」(Dellのデフォルト設定)にありました。明らかに、2年前にその設定を行ったことを忘れていましたが、すべてのサーバーでそれを行ったわけではありません。非常に有益なご意見をありがとうございました!
これをどこまで進めたいかに応じて、2つのアイデアがあります。
両方のサーバーのディスクを交換し、速度パフォーマンスがハードウェアにとどまるか、ソフトウェアとともに移動するかを確認します。
このパッケージをだましてインストールできる場合は、/opt/Dell/toolkit/bin/syscfg -o complete-bios-config.out
の出力を比較してください。
perf のようなシステムプロファイリングまたはJava VisualVM のようなプロファイリング)のいずれかのプロファイリングツールを試してください。
Perfを使用すると、実行中のJavaプロセスをPIDでプロファイルするか、ベンチマークをプロファイルすることができます。両方のシステムを見て、遅いシステムがどこで時間を費やしているかを確認してください。
apt-get install linux-tools-common linux-tools
次に、次のようなものです。
perf record -e cpu-cycles -p <pid>
または
perf record -a -g <benchmark command>
その後
perf report
システムのパフォーマンスの違いに関するいくつかのアイデア:
環境:気温や気流は違いますか?それらはラックにありますか?振動が原因で、ラックの位置によってシステムのパフォーマンスが異なることを確認しました。各ラックにはさまざまなレベルの振動があります。 I/Oがほとんど使用されていないとおっしゃっていたことを考えると、そうは思われません。しかし、ラックの一部の振動により、ディスクが2MB /秒のシーケンシャル書き込みに減速するのを見てきました。
ハードウェア障害:いずれかのハードウェアに障害がある可能性があります。プロファイリングを使用して、何が遅いかを確認します。 CPUまたはチップセットの不良、ヒートシンクが正しく取り付けられていない、ファンのバランスが崩れて振動が発生している、ファンが故障している、PSUが不良である可能性があります。交換しやすいものを交換してみてください。
出力と差分のその他の可能性:
これは私に関連するロードバランサーのようです。 「同じワークロード」と言うとき、これをどのように測定していますか?
テスト負荷を個別に適用して、各サーバーのベンチマークを直接行っていますか?
またはロードバランサーに負荷をかけ、両方のサーバーで結果を確認していますか?
後者を実行している場合(ロードバランサーを介して両方のサーバーにかかる負荷を測定する)、ロードバランサーがサーバー間でワークロードを正確に均等に分割していない可能性があります(サーバーのペアの20%のスキューは方法によっては珍しいことではありません)ロードバランサーは、誰がどのリクエストを取得するかを決定します)。これにより、1つのサーバーがより多くの負荷をかかるため、パフォーマンスが低下します。
(ロードバランサーを仲介として使用せずに、各サーバーを個別に直接ベンチマークしていて、すべてのコンポーネントが両方のシステム間で同一であることを確認した場合(メーカーのリビジョンまで)、私は途方に暮れています-他の点では同一のサーバー間でこの種のパフォーマンスの違いがある他の測定可能な理由は考えられません)
なぜ誰も「sysprof」を提案しなかったのですか。
これはそれが設計されたものです。
または、うーん、考え直してください.../etc/security/limits.confにいくつかの制限を詰めてみてください
両方試してください。
何も得られない場合は、セキュリティ上の問題または物理的な欠陥がある可能性があります。
参照: 私のLinuxサーバー「作成されたプロセスの数」と「コンテキストスイッチ」は信じられないほど急速に増加しています