Я бегу два Dell R410 серверы в одной стойке дата-центра (за балансировщиком нагрузки). Оба имеют одинаковую конфигурацию оборудования, работают под Ubuntu 10.4, имеют одинаковые пакеты и работают с одними и теми же веб-серверами Java (без другой нагрузки), и я вижу существенную разницу в производительности между ними.
Разница в производительности наиболее очевидна в среднем времени отклика обоих серверов (измеренном в самом приложении Java, без сетевых задержек): один из них на 20-30% быстрее другого, причем очень стабильно.
я использовал dstat
чтобы выяснить, есть ли еще переключатели контекста, ввод-вывод, свопинг или что-то еще, но я не вижу причин для разницы. При одинаковой рабочей нагрузке (без подкачки, практически без ввода-вывода) использование ЦП и нагрузка на одном сервере выше.
Таким образом, разница в основном связана с процессором, но в то время как простой тест процессора с использованием sysbench
(при отключенной всей остальной нагрузке) действительно дала разницу, она составила всего 6%. Так что, возможно, дело не только в процессоре, но и в производительности памяти.
Пока что я проверил:
dmidecode
, и это не показало различий)/proc/cpuinfo
, нет разницы.cpufreq-info
, нет разницы.Кроме того, несколько месяцев назад я полностью заменил оперативную память без каких-либо последствий.
Я потерян. Что я могу сделать, чтобы понять, что происходит?
ОБНОВИТЬ: Ура! Оба сервера теперь работают одинаково. Это были настройки "power CRAP", как jim_m_somewhere назвал их в комментариях. Параметры BIOS для «Управление питанием» были на «Максимальная производительность» на быстром сервере и на «Активном контроллере мощности» (настройка по умолчанию от Dell) на другом. Очевидно, я забыл, что сделал эту настройку два года назад, и я сделал это не на всех серверах. Спасибо всем за очень полезный вклад!
Две идеи, в зависимости от того, как далеко вы хотите зайти:
Поменяйте местами диски обоих серверов и посмотрите, остается ли скорость работы аппаратной или меняется вместе с программным обеспечением.
Сравните вывод /opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
если вы можете каким-то образом обмануть этот пакет для установки.
Попробуйте некоторые инструменты профилирования, либо профилирование системы, например перф или профилирование 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 МБ / с при последовательной записи из-за вибрации в частях стойки.
Аппаратные сбои: может быть неисправно любое оборудование. Используйте профилирование, чтобы увидеть, что происходит медленно. Это может быть неисправный процессор или набор микросхем, неправильно установлен радиатор, разбалансированные вентиляторы, вызывающие вибрацию, неисправные вентиляторы или даже неисправный блок питания. Попробуйте поменять местами вещи, которые легко поменять местами.
Похоже, это может быть балансировщик нагрузки, связанный со мной. Когда вы говорите «одинаковая нагрузка», как вы это измеряете?
Вы напрямую тестируете каждый сервер, применяя тестовую нагрузку изолированно?
или Вы прикладываете некоторую нагрузку к балансировщику нагрузки и смотрите на результаты на обоих серверах?
Если вы делаете последнее (измеряете нагрузку, размещенную на обоих серверах с помощью балансировщика нагрузки), ваш балансировщик нагрузки может не распределять рабочую нагрузку между серверами точно равномерно (20% перекос для пары серверов не редкость в зависимости от того, как ваш балансировщик нагрузки решает, кто какие запросы получает), что приводит к тому, что один сервер принимает больше нагрузки и, следовательно, работает плохо.
(Если вы непосредственно тестируете каждый сервер изолированно, без использования балансировщика нагрузки в качестве посредника, и вы убедились, что все компоненты идентичны (вплоть до версий производителя) в обеих системах, тогда я в растерянности - Я не могу придумать какой-либо другой измеримой причины такой разницы в производительности между идентичными серверами)
Больше возможностей для вывода и различий:
Почему никто не предложил "sysprof" ..?
Это то, для чего он был разработан.
Или, ммм, вторая мысль ... попробуйте ввести некоторые ограничения в /etc/security/limits.conf
Попробуйте оба.
Если вы ничего не получаете ... скорее всего, у вас проблема с безопасностью или физический дефект.
смотрите также: Мой Linux-сервер "Количество созданных процессов" и "Переключение контекста" растут невероятно быстро.