2つの同一のUbuntuサーバー間のパフォーマンスの大きな違いの原因を見つけるにはどうすればよいですか?


9

データセンターの同じラック(ロードバランサーの背後)で2台のDell R410サーバーを実行しています。どちらも同じハードウェア構成で、Ubuntu 10.4を実行し、同じパッケージをインストールし、同じJava Webサーバーを実行し(他の負荷なし)、2つの間に実質的なパフォーマンスの違いが見られます。

パフォーマンスの違いは、両方のサーバーの平均応答時間(ネットワークレイテンシなしのJavaアプリ自体で測定)で最も明白です。一方は他方よりも20〜30%高速で、非常に一貫しています。
以前dstatは、コンテキストスイッチ、IO、スワッピングなどがあるかどうかを考えていましたが、違いの理由はわかりません。同じワークロード(スワッピングなし、実質的にIOなし)では、1つのサーバーでのCPU使用率と負荷が高くなります。

したがって、違いは主にCPUバウンドであるように見えますが、sysbench(他のすべてのロードをオフにして)を使用した単純なCPUベンチマークは違いをもたらしましたが、それはわずか6%でした。だから、多分それはCPUだけでなくメモリパフォーマンスでもあります。

これまでに確認したこと:

  • すべてのコンポーネントのファームウェアリビジョン(同一)
  • BIOS設定(私はを使用してダンプをdmidecode行いましたが、違いは示されていませんでした)
  • 私は比較しました/proc/cpuinfo、違いはありません。
  • の出力を比較しましたがcpufreq-info、違いはありません。
  • Java / JVMパラメータ(両方のシステムで同じバージョンとパラメータ)

また、数ヶ月前にRAMを完全に交換しましたが、何の影響もありませんでした。

迷っています。何が起こっているのか、どうすればわかりますか?

更新:イェーイ!現在、両方のサーバーは同等に機能します。これは、jim_m_somewhereがコメントで名前を付けた「パワーCRAP」設定でした。「電源管理」のBIOSオプションは、高速サーバーでは「最大パフォーマンス」、もう1つでは「アクティブ電源コントローラー」(Dellのデフォルト設定)にありました。明らかに、2年前にその設定を行ったことを忘れており、すべてのサーバーでその設定を行ったわけではありません。非常に役立つ情報をありがとうございます。


2
RAMに障害がある可能性があります。アプリケーションがネットワーク負荷が高い場合は、ネットワークスタックに沿ったものになる可能性があります。
カイル

2
BIOSの「詳細CPU設定」を比較できますか?-そのためにipmitoolコマンドを実行できる可能性がありますか?RAMの速度は同じですか?ディスク/コントローラーにバッテリーバックアップがあるかどうか確認したと思います...「大声で」考えているだけです...両方のボックスのRAMは同じですか?登録済みまたは未登録... AH ...「電源CRAP」-ACPIが両方のサーバーでオフになっていることを確認しましたか?
jim_m_somewhere

2
同じデータを提供している場合、fwまたはdnsからロードバランシングが行われますか?ネットワーク統計はどのように見えますか?Javaの設定も同じですか?Javaヒープサイズは同じですか?これで暗闇で撮影。
au_stan

2
ソフトウェア構成は本当に同じですか?たとえば、AppArmorは一方で有効になっていて、もう一方では無効になっていますか?また、「dmesg」でエラーを確認してください。
アントンコーエン

1
ネットワークの有線ケーブル、スイッチのポート、およびiopsが表示されているか、HDDの状態がチェックされていますか?よろしくお願いします

回答:


6

これをどの程度使いたいかに応じて、2つのアイデア:

  1. 両方のサーバーのディスクを交換し、速度パフォーマンスがハードウェアで維持されるか、ソフトウェアで動くかを確認します。

  2. /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outこのパッケージをどうにかインストールしてインストールできるかどうかの出力を比較します。


dstatの出力は、IOが発生していないときにもパフォーマンスの違いが発生することをかなり明確に示しています。Ubuntu 10.4にsyscfgをインストールするのは確かに難しいようです。すでにdmidecodeの出力を比較しましたが、sysctlはもっと表示しますか?たぶん、各BIOS画面の写真を比較してそれらを比較する方が作業は少ないでしょう。私はこれを試すかもしれません。
the.duckman

1
ディスクを交換することで、IOを調査するつもりはありませんでしたが、ソフトウェアの(誤った)構成が原因で速度が低下している場合(たとえば、奇妙なカーネルパラメーター)。
chutz

3

出力と比較の可能性:

  • sysctl -a(カーネル調整パラメータが同じであることを確認してください)
  • cat / proc / interrupts(他のハードウェアの一部が壊れている可能性がありますか?)
  • ipmitoolセンサーリスト(ロングショットですが、より低いレベルの差、過熱、電圧の問題などを確認してください)

残念ながら、これらのコマンドの出力に明らかな違いはありません。
the.duckman

2
ソフトウェアを使用してファイルを比較すると、すべての違いが明らかです。この質問を参照してください:2つの構成ファイルを比較するにはどうすればよいですか?
スカイホーク

3

これは、私に関連したロードバランサーのように思えます。「同じワークロード」と言うとき、これをどのように測定しますか?
テスト負荷を個別に適用して、各サーバーを直接ベンチマークしていますか?
またはロードバランサーに負荷をかけ、両方のサーバーの結果を確認していますか?

後者を実行している場合(ロードバランサーを介して両方のサーバーにかかる負荷を測定している場合)、ロードバランサーがサーバー間でワークロードを正確に均等に分割していない可能性があります(サーバーのペアの20%スキューは、方法によっては珍しくありません)ロードバランサーは、誰がどのリクエストを取得するかを決定します)。これにより、1つのサーバーがより多くの負荷をかけ、パフォーマンスが低下します。

(ロードバランサーを仲介として使用せずに、各サーバーを個別に直接ベンチマークし、すべてのコンポーネントが両方のシステム間で(製造元のリビジョンまで)同一であることを確認した場合、私は途方に暮れています-他の点では同じサーバー間のこの種のパフォーマンスの違いについて、他に測定可能な理由は考えられません)


正解です。ロードバランサーもそれを実行します。これは実際には機能です。そのため、さまざまな方法で測定しました。もちろん、各サーバーで同じリクエストを個別に1回「再生」することさえありました。しかし、すべてのライブトラフィックを単一のサーバーにしばらく置いて、各サーバーが応答の準備に必要な時間を比較するだけでも、より複雑なセットアップと同じ結果が得られます。
the.duckman

うーん-その場合、私は公式に困惑しています-すべてが本当に同一である場合(そして、それがかなり同じであることを確認しているように思われる場合)、パフォーマンス数値の妥当な誤差範囲内にある必要があります(±5-7%)-あなた「2倍以上の変化が見られ、なぜなのか
わかり

3

perfなどのシステムプロファイリングやVisualVMなどのJavaプロファイリングなど、いくつかのプロファイリングツールを試してください。

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の不良などの可能性があります。交換しやすいものを交換してみてください。


1

なぜ誰も「sysprof」を提案していないのですか?

これはそのために設計されたものです。

または、うーん、2番目に考えました... /etc/security/limits.confにいくつかの制限を詰めてみてください

両方試してください。

何も表示されない場合....おそらくセキュリティ上の問題または物理的な欠陥があります。

も参照してください: 私のLinuxサーバーの「作成されたプロセスの数」と「コンテキストスイッチ」は信じられないほど速く成長しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.