Как мне найти причину огромной разницы в производительности между двумя одинаковыми серверами Ubuntu?

9

Я использую два сервера Dell R410 в одной стойке центра обработки данных (за балансировщиком нагрузки). Оба имеют одинаковую аппаратную конфигурацию, запускают Ubuntu 10.4, имеют одинаковые установленные пакеты и запускают одинаковые веб-серверы Java (без другой нагрузки), и я вижу существенную разницу в производительности между ними.

Разница в производительности наиболее очевидна в среднем времени отклика обоих серверов (измеряется в самом приложении Java без сетевых задержек): один из них работает на 20-30% быстрее, чем другой, очень стабильно.
Раньше я dstatвыяснял, есть ли еще контекстные переключатели, IO, подкачка или что-то еще, но я не вижу причин для разницы. При той же рабочей нагрузке (без подкачки, практически без ввода-вывода) загрузка и загрузка процессора выше на одном сервере.

Таким образом, разница, по-видимому, в основном связана с процессором, но хотя простой тест производительности процессора sysbench(с отключенной нагрузкой) дал разницу, он составил всего 6%. Так что, возможно, это не только процессор, но и производительность памяти.

Пока я проверил:

  • Версии прошивки на всех компонентах (одинаковые)
  • Настройки BIOS (я сделал дамп с помощью dmidecode, и это не показало различий)
  • Я сравнил /proc/cpuinfo, без разницы.
  • Я сравнил вывод cpufreq-info, без разницы.
  • Параметры Java / JVM (одинаковые версия и параметры в обеих системах)

Кроме того, я полностью заменил оперативную память несколько месяцев назад, без какого-либо эффекта.

Я потерян. Что я могу сделать, чтобы выяснить, что происходит?

ОБНОВЛЕНИЕ : Yay! Оба сервера теперь работают одинаково. Это были настройки «power CRAP», как jim_m_somewhere назвал их в комментариях. Параметры BIOS для «Управления питанием» были на «Максимальная производительность» на быстром сервере и на «Active Power Controller» (настройка по умолчанию от Dell) на другом. Очевидно, я забыл, что я сделал эту настройку два года назад, и я делал это не на всех серверах. Спасибо всем за ваш очень полезный вклад!

the.duckman
источник
2
Возможно, у вас неисправный ОЗУ. Если ваше приложение перегружено сетью, это может быть что угодно в сетевом стеке.
Кайл
2
Можете ли вы сравнить «Расширенные настройки процессора» в BIOS? - может быть, можно запустить команду ipmitool для этого? Скорость на ОЗУ одинакова? Я предполагаю, что вы проверили, есть ли у вас резервная батарея на дисках / контроллерах ... просто подумав "вслух" ... ОЗУ на обоих компьютерах одинаковое? зарегистрирован или не зарегистрирован ... AH ... вы проверили, что "power CRAP" - ACPI выключен на обоих серверах?
jim_m_somewhere
2
если они обслуживают одни и те же данные, происходит ли балансировка нагрузки с fw или dns? как выглядит статистика сети? идентичны ли ява-конфигурации? размер кучи Java такой же? стрельба в темноте на этом.
au_stan
2
Конфигурация программного обеспечения действительно идентична? Например, AppArmor включен на одном и отключен на другом? Также проверьте 'dmesg' на наличие ошибок.
Антон Коэн
1
Вы проверили проводной кабель сети, порт на коммутаторе, а также видите iops или проверьте работоспособность жесткого диска ... С уважением

Ответы:

6

Две идеи, в зависимости от того, как далеко вы хотите пойти с этим:

  1. Поменяйте местами диски обоих серверов и посмотрите, останется ли производительность на аппаратном уровне или будет зависеть от программного обеспечения.

  2. Сравните вывод /opt/dell/toolkit/bin/syscfg -o complete-bios-config.out, можете ли вы как-то обмануть этот пакет для установки.

chutz
источник
Вывод dstat довольно ясно показал, что разница в производительности возникает и тогда, когда IO не происходит. Установка syscfg в Ubuntu 10.4 действительно кажется сложной. Я уже сравнил вывод dmidecode, sysctl покажет больше? Может быть, это меньше работы с фотографиями каждого экрана BIOS и сравнить их. Я мог бы попробовать это.
the.duckman
1
Меняя местами диски, я имел в виду не IO, а скорее, если именно программная (неправильная) конфигурация вызывает медлительность (например, странный параметр ядра).
Chutz
3

Больше возможностей для вывода и сравнения:

  • sysctl -a (убедитесь, что настройки ядра одинаковы)
  • cat / proc / interrupts (может быть, есть какой-то другой аппаратный сбой?)
  • Список датчиков ipmitool (длинный выстрел, но проверьте на наличие более низких перепадов уровня, перегрева, проблем с напряжением и т. д.)
SolarKennedy
источник
Спасибо, к сожалению, нет очевидной разницы в выводе этих команд.
the.duckman
2
Все различия очевидны, если сравнивать файлы с помощью программного обеспечения . Пожалуйста, обратитесь к этому вопросу: Как я могу изменить два файла конфигурации?
Скайхок
3

Это звучит так, как будто это может быть балансировка нагрузки, связанная со мной. Когда вы говорите «та же рабочая нагрузка», как вы измеряете это?
Вы непосредственно тестируете каждый сервер, применяя тестовую нагрузку изолированно?
или вы применяете некоторую нагрузку к балансировщику нагрузки и смотрите результаты на обоих серверах?

Если вы делаете последнее (измеряя нагрузку, размещенную на обоих серверах с помощью балансировщика нагрузки), ваш балансировщик нагрузки может не распределять рабочую нагрузку точно равномерно между серверами (перекос на 20% для пары серверов не редкость в зависимости от того, как ваш балансировщик нагрузки решает, кто получает какие запросы), что приводит к тому, что один сервер получает больше нагрузки и, следовательно, работает плохо.

(Если вы проводите непосредственный сравнительный анализ каждого сервера в отдельности, не используя балансировщик нагрузки в качестве посредника, и вы убедились, что каждый компонент идентичен (вплоть до версий производителя) в обеих системах, тогда я в растерянности - Я не могу придумать какой-либо другой измеримой причины такого различия в производительности между одинаковыми серверами)

voretaq7
источник
Вы правы, наш балансировщик нагрузки тоже это делает - это на самом деле особенность. Таким образом, я измерял разными способами, и да, я даже «воспроизводил» одни и те же запросы на каждом сервере по одному разу. Но даже просто поместить весь живой трафик на один сервер на некоторое время и сравнить время, необходимое каждому серверу для подготовки ответа, дает те же результаты, что и для более сложных установок.
the.duckman
Хм - в этом случае я официально озадачен - если все действительно идентично (и мы, кажется, довольно хорошо подтвердили, что это так), вы должны быть в пределах разумного предела погрешности в показателях производительности (± 5-7%) - вы Вы видите, что вариации более чем вдвое больше, и я понятия не имею, почему: - /
voretaq7
3

Попробуйте некоторые инструменты профилирования, как системное профилирование, например, 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

Пара идей о том, как системы могут работать по-разному:

Окружающая среда: температура воздуха или расход воздуха отличаются? Они в стойках? Я видел, как системы работают по-разному в разных положениях стойки из-за вибрации. В каждой стойке есть разные уровни вибрации. Это маловероятно, учитывая, что вы сказали, что ввод-вывод почти не используется. Но я видел, как диски замедлялись до 2 МБ / сек при последовательной записи из-за вибрации в частях стойки.

Аппаратные сбои: любое оборудование может быть неисправно. Используйте профилирование, чтобы увидеть, что медленно. Это может быть плохой процессор или чипсет, ненадлежащим образом подключенный радиатор, несбалансированные вентиляторы, вызывающие вибрацию, неисправные вентиляторы, даже плохой блок питания. Попробуйте поменять вещи, которые легко поменять местами.

Антон Коэн
источник
1

Почему никто не предложил "sysprof" ..?

Это то, для чего он был разработан.

Или, ну, вторая мысль ... попробуйте добавить некоторые ограничения в /etc/security/limits.conf

Попробуйте оба.

Если вы ничего не получите .... у вас скорее всего проблемы с безопасностью или физический дефект.

см. также: мой Linux-сервер «Количество созданных процессов» и «Переключение контекста» невероятно быстро растут

ArrowInTree
источник