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


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

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

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

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

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

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

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

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


9
2017-12-04 16:57


Источник


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


Ответы:


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

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

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


6
2017-12-06 23:48



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


Дополнительные возможности вывода и разности:

  • sysctl -a (убедитесь, что tuneables ядра одинаковы)
  • cat / proc / interrupts (Может быть, есть какая-то другая аппаратная ошибка?)
  • Список датчиков ipmitool (длинный снимок, но проверьте более низкие различия в уровнях, перегрев, проблемы с напряжением и т. д.).

3
2017-12-07 17:27



Спасибо, нет очевидной разницы в выходе этих команд, к сожалению. - the.duckman
Все различия очевидны, если вы сравниваете файлы, используя программного обеспечения, Пожалуйста, обратитесь к этому вопросу: Как мне изменить два файла конфигурации? - Skyhawk


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

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

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


3
2017-12-07 19:24



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


Попробуйте некоторые инструменты профилирования, как профилирование системы, например перфорация или профилирование 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. Но я видел, что диски замедлялись до 2 Мбайт / сек последовательной записи из-за вибрации в частях стойки.

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


3
2017-12-08 04:11





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

Для этого он был разработан.

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

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

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

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


1
2017-12-07 20:28