Bagaimana saya menemukan penyebab perbedaan besar dalam kinerja antara dua server Ubuntu yang identik?

9

Saya menjalankan dua server Dell R410 di rak pusat data yang sama (di belakang load balancer). Keduanya memiliki konfigurasi perangkat keras yang sama, jalankan Ubuntu 10.4, memiliki paket yang sama diinstal dan menjalankan server web Java yang sama (tidak ada beban lain) dan saya melihat perbedaan kinerja yang substansial antara keduanya.

Perbedaan kinerja paling jelas dalam waktu respons rata-rata dari kedua server (diukur dalam aplikasi Java itu sendiri, tanpa latensi jaringan): Salah satunya adalah 20-30% lebih cepat daripada yang lain, sangat konsisten.
Saya dulu dstatmencari tahu, jika ada lebih banyak konteks switch, IO, swapping atau apa pun, tapi saya tidak melihat alasan perbedaannya. Dengan beban kerja yang sama, (tanpa pertukaran, hampir tanpa IO), penggunaan dan beban cpu lebih tinggi pada satu server.

Jadi perbedaannya tampaknya sebagian besar terikat CPU, tetapi sementara benchmark cpu sederhana menggunakan sysbench(dengan semua beban lainnya dimatikan) memang menghasilkan perbedaan, itu hanya 6%. Jadi mungkin bukan hanya CPU tetapi juga kinerja memori.

Sejauh ini saya sudah memeriksa:

  • Revisi firmware pada semua komponen (identik)
  • Pengaturan BIOS (saya menggunakan dump dmidecode, dan itu tidak menunjukkan perbedaan)
  • Saya membandingkan /proc/cpuinfo, tidak ada perbedaan.
  • Saya membandingkan output cpufreq-info, tidak ada perbedaan.
  • Parameter Java / JVM (versi dan parameter yang sama pada kedua sistem)

Juga, saya benar-benar mengganti RAM beberapa bulan yang lalu, tanpa efek apa pun.

Saya tersesat. Apa yang bisa saya lakukan untuk mencari tahu, apa yang sedang terjadi?

PEMBARUAN : Yay! Kedua server berkinerja sama sekarang. Itu adalah pengaturan "power CRAP" ketika jim_m_som memberi nama mereka di komentar. Opsi BIOS untuk "Manajemen Daya" ada di "Kinerja Maksimum" pada server cepat, dan "Kontrol Daya Aktif" (pengaturan default dari Dell) pada yang lain. Jelas saya lupa, bahwa saya membuat pengaturan itu dua tahun lalu, dan saya tidak melakukan itu di semua server. Terima kasih untuk semua atas masukan Anda yang sangat membantu!

the.duckman
sumber
2
Kemungkinan Anda memiliki RAM yang salah. Jika aplikasi Anda berat jaringan, itu bisa berupa apa saja di sepanjang tumpukan jaringan.
Kyle
2
Bisakah Anda membandingkan "Pengaturan CPU Lanjutan" di BIOS? - mungkin dapat menjalankan perintah ipmitool untuk melakukannya? Apakah kecepatan pada RAM sama? Saya berasumsi Anda telah memeriksa apakah Anda memiliki cadangan baterai pada disk / pengendali ... hanya berpikir "keras" ... apakah RAM pada kedua kotak sama? terdaftar atau tidak terdaftar ... AH ... apakah Anda sudah memeriksa "power CRAP" - ACPI tidak aktif di kedua server?
jim_m_somewhere
2
jika mereka menyajikan data yang sama, apakah ada penyeimbangan muatan yang terjadi dari fw atau dns? seperti apa statistik jaringan itu? Apakah konfigurasi java juga identik? Apakah ukuran heap java sama? menembak dalam gelap yang satu ini.
au_stan
2
Apakah konfigurasi perangkat lunaknya benar-benar identik? Misalnya, apakah AppArmor diaktifkan di satu dan dinonaktifkan di yang lain? Juga periksa 'dmesg' untuk kesalahan.
Anton Cohen
1
Apakah Anda memeriksa kabel jaringan kabel, port pada Switch dan juga Anda melihat iops atau memeriksa kesehatan HDD ... Salam

Jawaban:

6

Dua ide, tergantung pada seberapa jauh Anda ingin melakukan ini:

  1. Tukar disk kedua server dan lihat apakah kinerja kecepatan tetap pada perangkat keras atau bergerak dengan perangkat lunak.

  2. Bandingkan hasilnya /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outjika Anda bisa mengelabui paket ini untuk menginstal.

chutz
sumber
Output dstat menunjukkan dengan cukup jelas, bahwa perbedaan kinerja terjadi juga, ketika tidak ada IO yang terjadi. Menginstal syscfg di Ubuntu 10.4 tampaknya memang rumit. Saya sudah membandingkan output dari dmidecode, apakah sysctl akan menampilkan lebih banyak? Mungkin kurang bekerja untuk foto dari setiap layar BIOS dan membandingkannya. Saya mungkin mencoba ini.
the.duckman
1
Dengan menukar disk saya tidak bermaksud untuk menyelidiki IO, tetapi jika itu adalah konfigurasi perangkat lunak (mis) yang menyebabkan kelambatan (misalnya parameter kernel ganjil).
chutz
3

Lebih banyak kemungkinan untuk dihasilkan dan dif:

  • sysctl -a (pastikan tuneable kernel sama)
  • cat / proc / interupsi (Mungkin ada beberapa perangkat keras lain yang kacau?)
  • daftar sensor ipmitool (tembakan panjang, tetapi periksa lebih banyak perbedaan level rendah, panas berlebih, masalah voltase, dll)
SolarKennedy
sumber
Terima kasih, sayangnya tidak ada perbedaan dalam output dari perintah ini.
the.duckman
2
Semua perbedaan jelas, jika Anda membandingkan file menggunakan perangkat lunak . Silakan merujuk ke pertanyaan ini: Bagaimana cara membedakan dua file konfigurasi?
Skyhawk
3

Ini terdengar seperti penyeimbang beban yang terkait dengan saya. Ketika Anda mengatakan "beban kerja yang sama" bagaimana Anda mengukur ini?
Apakah Anda secara langsung melakukan benchmarking pada setiap server dengan menerapkan beban uji secara terpisah?
atau Apakah Anda menerapkan beberapa beban ke penyeimbang beban dan melihat hasilnya di kedua server?

Jika Anda melakukan yang terakhir (mengukur beban yang ditempatkan pada kedua server melalui penyeimbang beban) penyeimbang beban Anda mungkin tidak membagi beban kerja secara merata di antara server (kemiringan 20% untuk sepasang server tidak jarang tergantung pada bagaimana penyeimbang beban Anda memutuskan siapa yang menerima permintaan mana), yang menyebabkan satu server menerima lebih banyak muatan, dan karenanya berkinerja buruk.

(Jika Anda secara langsung membuat tolok ukur setiap server, secara terpisah, tanpa menggunakan penyeimbang beban sebagai perantara, dan Anda telah memverifikasi bahwa setiap komponen identik (turun ke revisi pabrikan) antara kedua sistem maka saya bingung - Saya tidak dapat memikirkan alasan lain yang dapat diukur untuk perbedaan kinerja semacam ini antara server yang identik)

voretaq7
sumber
Anda benar, penyeimbang beban kami juga melakukannya - sebenarnya ini adalah fitur. Jadi saya mengukur dalam banyak cara, dan ya, saya bahkan "memutar ulang" permintaan yang sama pada setiap server satu per satu. Tetapi bahkan untuk sekadar menempatkan semua lalu lintas langsung ke satu server untuk beberapa waktu dan membandingkan waktu yang dibutuhkan masing-masing server untuk menyiapkan respons menghasilkan hasil yang sama dengan pengaturan yang lebih kompleks.
the.duckman
Hmm - dalam hal ini saya secara resmi bingung - jika semuanya benar-benar identik (dan kami tampaknya telah mengkonfirmasi dengan cukup baik), Anda harus berada dalam margin kesalahan yang wajar pada angka kinerja (± 5-7%) - Anda Saya melihat variasi lebih dari dua kali lipat, dan saya tidak tahu mengapa: - /
voretaq7
3

Coba beberapa alat profil, baik profil sistem seperti perf atau Java profiling seperti VisualVM .

Dengan perf, Anda dapat membuat profil proses Java yang berjalan dengan PID atau membuat profil benchmark. Lihatlah kedua sistem, lihat di mana sistem lambat menghabiskan waktunya.

apt-get install linux-tools-common linux-tools

Maka sesuatu seperti:

perf record -e cpu-cycles -p <pid>

atau

perf record -a -g <benchmark command>

kemudian

perf report

Beberapa ide tentang bagaimana sistem dapat bekerja secara berbeda:

Lingkungan: Apakah suhu udara atau aliran udara berbeda? Apakah mereka ada di rak? Saya telah melihat sistem bekerja secara berbeda pada posisi rak yang berbeda, yang disebabkan oleh getaran. Ada berbagai tingkat getaran di setiap rak. Ini tidak mungkin, mengingat Anda mengatakan hampir tidak ada I / O yang digunakan. Tapi saya telah melihat disk memperlambat hingga 2MB / sec menulis berurutan karena getaran di bagian rak.

Kesalahan Perangkat Keras: Perangkat keras apa pun bisa rusak. Gunakan profil untuk melihat apa yang lambat. Ini bisa berupa CPU atau chipset yang buruk, heatsink yang tidak terpasang dengan benar, kipas yang tidak seimbang menyebabkan getaran, kipas yang gagal, bahkan PSU yang buruk. Cobalah menukar hal-hal yang mudah ditukar.

Anton Cohen
sumber