Вопрос или проблема
Предположим, у меня есть 5 виртуальных машин (4 сервера tomcat и одна база данных). Не очень многолюдно (100 разных пользователей в пиковые часы). Мне интересно, лучше ли иметь, например, CPU на 3 ГГц с 4 ядрами или на 2 ГГц с 8 ядрами?
Для контекста: скажете ли вы, что проблема недостаток ядер, если пиковая нагрузка ЦП за 1 минуту превышает 3, а средняя составляет около 0,9, но общая загрузка ЦП остается значительно ниже 20%? Моя интуиция подсказывает, что больше ядер (даже с гораздо меньшей частотой в ГГц) уменьшит нагрузку на ЦП и сделает сервер более отзывчивым… Но не уверен.
О, одна вещь может быть важной – виртуализация основана на Proxmox 4 с LXC в моем случае. Но я предполагаю, что другие виртуализации не будут сильно отличаться.
Мое мнение по этому поводу значительно изменилось и стало намного более нюансированным сейчас (2024). Поскольку это принятый ответ, я оставляю его ниже для будущих поколений.
(В зависимости от профиля нагрузки, если сервер не перегружен, система с более высокой тактовой частотой может значительно повлиять на время загрузки страниц при не многопоточных задачах, зависящих от ЦП (например, WordPress) – но в зависимости от того, как написано приложение, это может не быть таким большим делом на tomcat) – Модель многопоточности веб-сервера также может оказать значительное влияние
Принятый ответ был таким:
При прочих равных условиях, выбирайте 8 ядер по 2 ГГц = 16 “ГГц” ядер, по сравнению с 3 по 4 = 12 “ГГц” ядер. Кажется, что ваша нагрузка позволяет использовать несколько ядер (много пользователей, несколько виртуальных машин не говоря уже о потоках), поэтому ваша система извлечет выгоду из дополнительных ядер.
Конечно, это предполагает, что частота – это единственное важное качество ядер. Это не так. Я бы взглянул на www.cpubenchmark.net для каждого из ЦП и выбрал бы тот, у которого более высокая “оценка производительности”.
Вы не можете слишком много сказать о производительности только по нагрузке ЦП – особенно на многоядерных ЦП. “Наивно” можно взять нагрузку и разделить на количество ядер, и если это < 1, то все в порядке. Конечно, это не дает точной картины - я бы запустил "vmstat" и посмотрел, что занимает ресурсы - если SYS + User высоки, я бы искал узкое место в другом месте. (Дисковый ввод-вывод, блокировки базы данных). Тем не менее, пик нагрузки < 4 на 4-ядерном ЦП обычно означает, что сервер справляется - но не в оптимальном режиме. Большее количество ядер может сделать систему более отзывчивой, не влияя на "числа нагрузки".
Вы, вероятно, обнаружите, что ваша система ограничена вводом-выводом/диском – но это только предположение.
Ответ или решение
Чтобы ответить на вопрос о том, что лучше для хостингового сервера веб-серверов — больше потоков/ядер или более мощный процессор, необходимо рассмотреть несколько факторов, включая архитектуру приложения, специфику рабочей нагрузки и требования к производительности.
Постановка задачи
Предположим, у вас есть 5 виртуальных машин (4 сервера Tomcat и один сервер базы данных), и на пике вы ожидаете около 100 различных пользователей. Параметры процессоров, которые вы рассматриваете, — это 3 ГГц с 4 ядрами против 2 ГГц с 8 ядрами. Исходя из представленных данных, ваш сервер демонстрирует пиковую загрузку процессора 1 минута выше 3 и среднюю загрузку около 0,9, при этом общая загрузка процессора остается ниже 20%.
Анализ производительности
-
Частота против числа ядер:
- 3 ГГц и 4 ядра (12 ГГц эквивалент): Этот процессор имеет более высокую тактовую частоту, что может обеспечить лучшее время отклика при выполнении задач, не оптимизированных для многопоточности. Это может быть критично для определённых приложений, особенно если они не используют возможности многопоточности.
- 2 ГГц и 8 ядер (16 ГГц эквивалент): Этот процессор предлагает больше ядер, что является преимуществом для многопоточных приложений. В вашем случае, если сервери Tomcat оптимизированы для работы с несколькими потоками, такая конфигурация, вероятно, будет более эффективной.
-
Нагрузочные модели:
Ваши наблюдения о том, что средняя загрузка ниже 20%, но пиковая загрузка превышает 3, указывают на то, что на сервере происходят всплески нагрузки. Это может свидетельствовать о том, что система использует несколько потоков, но они иногда перегружаются. -
Оптимизация работы с виртуализацией:
Виртуализация в Proxmox LXC также подразумевает, что каждая виртуальная машина делит ресурсы на физическом сервере. Каждый дополнительный ядро может помочь в распределении нагрузки между виртуальными машинами.
Выводы
-
Больше ядер: Для вашего сценария, где вы имеете дело с несколькими серверами и потенциальной многопоточной работой, выбор процессора с большим количеством ядер (2 ГГц с 8 ядрами) может предложить лучшую производительность в рамках задач, требующих параллелизма. Это может снизить нагрузки и улучшить отзывчивость системы.
-
Быстрее процессор: Если бы ваши приложения не были так сильно оптимизированы для многопоточности и максимально загружали одно ядро, то рассмотрение процессора с большей частотой (3 ГГц с 4 ядрами) могло бы быть оправданным.
Тем не менее, учитывая вашу нагрузку и специфику веб-приложений, возможность использования большего количества ядер кажется более перспективной, так как это может обеспечить большую гибкость и обработку большего числа запросов одновременно.
Рекомендации
- Тестирование в реальной среде: Обязательно выполните тесты производительности, чтобы полностью понять, как ваша система будет реагировать на разные типы нагрузок, и выберите архитектуру процессора, соответствующую специфике ваших приложений.
- Мониторинг системы: Используйте инструменты мониторинга, такие как
vmstat
, чтобы анализировать, где возникают узкие места, будь то ИО, использование памяти или процессора. Это поможет вам принимать более обоснованные решения в будущем.
Таким образом, основываясь на ваших потребностях, наиболее подходящим выбором будет конфигурация с большим количеством ядер, что обеспечит большую производительность и отзывчивость веб-серверов в условиях многопользовательской среды.