Community
391
HostiServer
2026-01-31 13:15:00

Конфігурація сервера для high-traffic: CPU, RAM, NVMe, тюнінг

⏱️ Час читання: ~10 хвилин | 📅 Оновлено: 31 січня 2026

Коли сервер перестає справлятися

Сайт росте — і це добре. Поки сервер встигає. Одного дня трафік зростає, сторінки починають вантажитись повільніше, CPU йде в червону зону, база даних гальмує. Той "потужний сервер", який ще вчора мав запас — тепер ледве дихає.

Знайома ситуація? Це не катастрофа — це сигнал переглянути конфігурацію. Бо справа не в тому, щоб "купити дорожче", а в тому, щоб налаштувати правильно.

За роки роботи з high-traffic проєктами ми бачили сотні випадків, коли правильний тюнінг давав результат кращий за апгрейд заліза. Сервер за $50/міс з оптимальною конфігурацією часто обганяє сервер за $200 з дефолтними налаштуваннями.

Що таке high-traffic?

Точної цифри немає. Один сайт падає при 2000 одночасних користувачів, інший тримає 50 000. Все залежить від трьох факторів:

  • Скільки одночасних запитів обробляє сервер
  • Як поводиться ваша CMS або застосунок
  • Скільки "важкого" контенту — картинок, скриптів, запитів до бази

Для блогу 10 000 відвідувачів — це нічого. Для інтернет-магазину з фільтрами, синхронізацією залишків та динамічними цінами — це вже серйозне навантаження. Один запит на головну блогу — це один SELECT з бази. Один запит на каталог Magento з фільтрами — це десятки запитів, перерахунок цін, перевірка залишків на складі.

Цей гайд допоможе розібратися в конфігурації сервера для проєктів з серйозним трафіком — від вибору заліза до тонкого тюнінгу софту.

Процесор: не тільки ядра

Багато хто дивиться лише на кількість ядер — і це помилка. У 2026 році головне — продуктивність одного потоку (single-thread performance). Саме вона визначає, як поводитиметься PHP, Python чи Node.js під навантаженням.

PHP виконує кожен запит в одному потоці. Якщо у вас 32 повільних ядра замість 8 швидких — PHP буде повільніше обробляти кожен окремий запит. Паралелізм допомагає тільки коли багато одночасних запитів, але кожен з них все одно залежить від швидкості одного ядра.

Орієнтовні рекомендації:

  • 4-8 ядер — невеликі бізнес-сайти, блоги, легкі CMS
  • 12-16 ядер — середні інтернет-магазини, SaaS-проєкти
  • 24+ ядер — контейнери, стрімінг, аналітика, великі бази

Іноді 16-ядерний фізичний сервер працює краще за 32-ядерний віртуальний. Причина — virtualization overhead. Частина продуктивності губиться між шарами віртуалізації. На VPS ви ділите фізичні ресурси з іншими клієнтами, і це створює додаткові затримки.

Потоки (threads) теж важливі, але тільки якщо софт їх використовує. Node.js, Go, Nginx — так. WordPress — на жаль, ні. Типовий WordPress не вміє розпаралелювати один запит на кілька потоків — він просто чекає поки база даних поверне результат.

ℹ️ Як перевірити: Запустіть cat /proc/cpuinfo | grep "model name" щоб побачити модель CPU. Потім порівняйте single-thread benchmark вашого процесора на PassMark або Geekbench. AMD EPYC та Intel Xeon Scalable останніх поколінь мають хорошу однопотокову продуктивність.

Пам'ять і кешування

RAM — це кисень для сервера. Коли її не вистачає, система починає писати тимчасові дані на диск (swap), і сайт "помирає" від затримок. Swap на NVMe все ще в сотні разів повільніший за RAM.

Орієнтири для вибору RAM:

  • 8 ГБ — невеликий WordPress або корпоративний сайт
  • 16-24 ГБ — інтернет-магазин, SaaS
  • 32-64 ГБ — великі бази даних, аналітика, відео

Але навіть 64 ГБ не врятують, якщо немає кешування. Redis, Memcached, Varnish — ось що реально розвантажує CPU і базу даних. Без кешу кожен запит йде в базу, PHP генерує сторінку заново, сервер робить одну й ту саму роботу тисячі разів.

Як працює кешування

Redis — зберігає результати запитів до бази, сесії користувачів, object cache. Один запит до Redis займає мікросекунди, запит до MySQL — мілісекунди. Різниця в 1000 разів.

FastCGI Cache — Nginx зберігає готову HTML-сторінку і віддає її без звернення до PHP взагалі. Для анонімних користувачів це ідеальне рішення.

OPcache — кешує скомпільований PHP-код. Без нього PHP перекомпільовує кожен файл при кожному запиті.

💡 Реальний кейс: Інтернет-магазин на Magento 2 під час розпродажу. До оптимізації: 15 RPS, TTFB ~1.2 секунди. Сервер "задихався" від черг PHP-FPM. Після впровадження Redis для кешування сесій та бекенд-кешу + налаштування FastCGI Micro-caching (кешування анонімних запитів на 1-2 секунди): 65+ RPS, TTFB ~250-300мс. Різниця в 4 рази — без заміни заліза.

NVMe: швидкість, до якої звикаєш

Хто перейшов з SSD на NVMe — назад не повертається. Різниця не у відсотках, а в рази — особливо для баз даних та логів. Звичайний SATA SSD дає 500-600 МБ/с послідовного читання і ~50 000 IOPS. NVMe — 3000-7000 МБ/с і 500 000+ IOPS.

NVMe працює напряму через шину PCIe, без обмежень SATA-контролера. Результат: менша латентність, більше операцій введення-виведення за секунду, стабільніша робота під навантаженням. Для бази даних це критично — кожен запит це звернення до диска.

Результати тестування NVME Disk IOs

RAID конфігурації

Важливо: не економте на надійності.

  • RAID-1 (дзеркало) — мінімум для production. Два диски з однаковими даними. Один вийшов з ладу — працюєте на другому
  • RAID-10 — для максимальної продуктивності та надійності. Комбінація дзеркала і stripe
  • RAID-0 — швидкий, але при відмові одного диска втрачаєте ВСЕ. Тільки для тимчасових даних

В одному проєкті перенесення eCommerce сайту з SSD-масиву на NVMe RAID-1 зменшило середній час завантаження сторінки з 1.9 до 1.2 секунди. Особливо помітна різниця на сторінках каталогу з фільтрами — там багато випадкових читань з бази.

Мережа: вузьке місце, про яке забувають

Іноді все начебто добре — CPU в нормі, RAM вистачає, кеш налаштований — а сайт все одно гальмує. Причина проста: вузький канал зв'язку. Особливо це помітно при великій кількості одночасних з'єднань або передачі великих файлів.

100 Мбіт/с у 2026 році — це рівень офісу, не продакшену. При 100 Мбіт/с ви можете віддати максимум ~12 МБ/с. Якщо середня сторінка важить 2 МБ (з картинками), то одночасно можна обслужити лише 6 користувачів на повній швидкості.

Для стабільної роботи потрібно:

  • Мінімум 1 Гбіт/с порт — стандарт для будь-якого серйозного проєкту
  • Підтримка HTTP/3 (QUIC) — швидше встановлення з'єднань, краща робота на мобільних мережах
  • Підключення CDN для глобальної аудиторії — статику віддає найближчий до користувача сервер

CDN може взяти на себе 60-80% навантаження, якщо ваша аудиторія розкидана географічно. Картинки, CSS, JavaScript, відео — все це кешується на edge-серверах по всьому світу. Основний сервер займається тільки динамічним контентом.

Hostiserver комбінує CDN з NVMe-конфігураціями — це знімає вузькі місця без складних рішень. Налаштування займає кілька хвилин через панель керування.

Тюнінг: різниця між "працює" і "літає"

Навіть найдорожче залізо може гальмувати через погану конфігурацію. Типова ситуація: купили потужний сервер, поставили CMS, залишили дефолтні налаштування MySQL та PHP-FPM — і дивуються чому повільно. Дефолти розраховані на мінімальне споживання ресурсів, а не на продуктивність.

PHP-FPM (приклад для 16 ГБ RAM)

Використовуємо динамічний режим (pm = dynamic) для змішаних навантажень або static для високонавантажених проєктів з передбачуваним трафіком:

[www]
pm = dynamic
pm.max_children = 150
; Формула: (Вільна RAM) / (розмір процесу PHP ~60-100MB)
; Для 16GB сервера з 12GB вільної RAM: 12000/80 ≈ 150
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
; Перезапуск workers для уникнення витоків пам'яті
pm.max_requests = 1000
; Таймаут для довгих скриптів (імпорт, генерація звітів)
request_terminate_timeout = 300

Чому pm.max_requests важливий: PHP-процеси можуть "текти" — поступово займати все більше пам'яті через погано написані плагіни чи розширення. Без обмеження за кілька годин вони з'їдають всю RAM. З pm.max_requests = 1000 кожен worker перезапускається після 1000 оброблених запитів.

MySQL / MariaDB

[mysqld]
# Головний параметр — 50-70% від загальної RAM
# Для 16GB сервера де MySQL єдиний важкий процес
innodb_buffer_pool_size = 10G
# 25% від buffer pool для прискорення запису
innodb_log_file_size = 2G
# Залежить від кількості PHP-процесів
# Кожен PHP worker може тримати 1-2 з'єднання
max_connections = 500
# Логування повільних запитів — ОБОВ'ЯЗКОВО
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

Про slow_query_log: це ваш головний інструмент діагностики. Всі запити довші за long_query_time секунд потрапляють у лог. Потім аналізуєте їх через mysqldumpslow або pt-query-digest і оптимізуєте найповільніші.

Nginx

worker_processes auto;  # По одному на ядро CPU
worker_connections 4096; # Макс з'єднань на worker
# Уникнення запису великих відповідей PHP у файли
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
# Gzip для економії bandwidth
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/json 
           application/javascript text/xml 
           application/xml image/svg+xml;
# Brotli ще ефективніший (якщо встановлено модуль)
# brotli on;
# brotli_comp_level 6;

Ці "дрібниці" можуть подвоїти пропускну здатність без апгрейду заліза. Один клієнт після правильного налаштування цих параметрів отримав приріст з 40 до 95 RPS на тому ж сервері.

Моніторинг: як зрозуміти що сервер не тягне

htop під навантаженням

Ознаки проблем

  • CPU > 80% протягом 5+ хвилин — Warning
  • CPU > 95% — Critical, потрібна негайна реакція
  • RAM > 90% (за винятком кешу) — сервер починає свопити
  • Disk Space < 10% — найчастіша причина падіння бази даних
  • HTTP 5xx > 1% від трафіку — щось серйозно не так

Steal Time (%st) — прихований ворог VPS

Якщо в htop або top бачите Steal Time > 1-2% — сусіди по хмарі забирають ваші ресурси CPU. Це ознака що пора переходити на Dedicated.

Найважливіші метрики для high-traffic

  1. Average Response Time (Latency) — якщо залізо в нормі, а Latency росте — проблема в коді або блокуваннях у БД
  2. Error Rate — відсоток 4xx/5xx помилок
  3. TTFB (Time to First Byte) — час до першого байта відповіді

Правило: якщо будь-який з цих показників в червоній зоні більше 5 хвилин — це вже не "піковий момент", а системна проблема.

Навантажувальне тестування

Перш ніж запускати рекламу або чекати на сезонний пік — протестуйте сервер. Краще дізнатися про проблеми в тесті, ніж під час розпродажу. Load testing показує реальну межу вашого сервера — скільки одночасних користувачів він витримає до того, як почне гальмувати.

Інструменти для тестування

k6 (рекомендуємо) — найсучасніший інструмент. Сценарії на JavaScript, чудові звіти, легко інтегрується в CI/CD. Можна описати реалістичну поведінку користувача: зайшов на головну, перейшов у каталог, додав товар у кошик.

# Встановлення
sudo apt install k6
# Простий тест на 100 віртуальних користувачів протягом 30 секунд
k6 run --vus 100 --duration 30s script.js

wrk — для перевірки чистої пропускної здатності. Найшвидший з усіх, але без складних сценаріїв:

# 12 потоків, 400 з'єднань, 30 секунд
wrk -t12 -c400 -d30s https://example.com/

Locust — якщо потрібні складні сценарії поведінки користувачів. Написаний на Python, має веб-інтерфейс для моніторингу тесту в реальному часі.

Apache Benchmark (ab) — найпростіший варіант, вже встановлений на більшості серверів:

# 1000 запитів, 100 одночасних
ab -n 1000 -c 100 https://example.com/

Що вважається нормальним результатом

Тип сайту Нормальний RPS Примітка
Landing page 500+ RPS Статика, мінімум динаміки
WordPress блог 100-200 RPS З увімкненим кешуванням
WooCommerce 50-100 RPS Без full page cache
Magento 2 30-80 RPS Складна CMS

Якщо ваші результати значно нижчі — є простір для оптимізації. Зверніть увагу не тільки на RPS, а й на percentile latency: p95 і p99 показують час відповіді для 95% та 99% запитів. Якщо середній час 200мс, а p99 — 5 секунд, значить частина користувачів отримує дуже повільні відповіді.

ℹ️ Важливо: Тестуйте з іншого сервера, не з того ж де працює сайт. Інакше сам процес тестування з'їсть ресурси і результати будуть неточними. Ідеально — запускати k6 з окремого VPS в тому ж датацентрі.

Scaling: коли апгрейд не допомагає

Рано чи пізно сервер впирається в стелю. Навіть потужне залізо не врятує, якщо архітектура не розділена. Є два шляхи: вертикальне масштабування (більше ресурсів на одному сервері) та горизонтальне (більше серверів).

Коли переходити з VPS на Dedicated

VPS — це віртуальна машина на спільному фізичному сервері. Ви ділите ресурси з іншими клієнтами. Dedicated — весь фізичний сервер ваш. Коли VPS перестає вистачати:

  • Трафік: стабільно понад 100-150 RPS або 50 000+ унікальних відвідувачів на добу
  • Steal Time (%st): у top/htop показує > 1-2% — сусіди забирають ваші ресурси CPU
  • I/O Wait: високі затримки дискової підсистеми через спільний storage
  • Нестабільний TTFB: час відгуку "плаває" без видимих причин у вашому коді

Steal Time (%st) — головний індикатор. Якщо бачите більше 1-2% стабільно — сусіди по хмарі забирають ваші ресурси. На Dedicated цієї проблеми немає.

Горизонтальне масштабування

Коли CPU тримається вище 70% і сторінки все одно повільні — час розділяти архітектуру:

  • База даних на окремий сервер — найчастіше перше що виносять. MySQL/PostgreSQL отримує виділені ресурси, не конкурує з PHP за CPU
  • Статика на CDN — картинки, CSS, JS віддає CDN, основний сервер займається тільки динамікою
  • Redis на окремий сервер — при великих обсягах кешу
  • Load balancer — розподіляє трафік між кількома web-серверами

Це складніше в налаштуванні та підтримці, але дає стабільність і можливість масштабуватися далі. Всі великі проєкти проходять цей етап — інакше вони застрягають на межі одного сервера.

ℹ️ Типова архітектура high-load:
Load Balancer (Nginx/HAProxy) → 2-3 Web-сервери (PHP-FPM) → Redis (сесії, кеш) → MySQL Primary + Replica (read/write split) → CDN для статики

Типові помилки

❌ Купити "з запасом" і не налаштувати

Потужний сервер з дефолтними налаштуваннями працює гірше за слабший з правильним тюнінгом. Половина ресурсів простоює, а сайт все одно гальмує через неоптимальні параметри PHP-FPM або MySQL.

❌ Ігнорувати швидкість диска

Багато хто дивиться тільки на CPU і RAM. А потім дивується, чому база даних гальмує. Для high-traffic NVMe — не розкіш, а необхідність.

❌ Думати що RAID = бекап

RAID захищає від відмови диска, але не від випадкового видалення, зламу чи ransomware. Бекапи потрібні окремо, на інший сервер або storage.

❌ Плагіни що вбивають кеш

Деякі плагіни WordPress або модулі Magento додають унікальні параметри до кожного запиту, роблячи кешування неможливим. Результат — кожен запит генерується заново.

❌ Не обмежувати PHP workers

Без pm.max_requests PHP-процеси можуть "пухнути" від витоків пам'яті. За кілька годин вони з'їдають всю RAM і сервер падає.

Приклади конфігурацій що працюють

Тип сайту CPU RAM Диск Мережа
WordPress 4 vCPU 8 ГБ NVMe 100 ГБ 1 Гбіт/с
WooCommerce середній 8 vCPU 16 ГБ NVMe RAID-1 1 Гбіт/с + CDN
SaaS / API 12 vCPU 32 ГБ NVMe RAID-1 1 Гбіт/с
High-load eCommerce 16-24 vCPU 32-64 ГБ NVMe RAID-10 1-10 Гбіт/с

Це реальні production-конфігурації, які пройшли через піки трафіку без падінь.

🚀 Готові обрати правильний хостинг?

Гнучкість Cloud (VPS) або потужність виділених серверів — рішення що масштабуються з вашим зростанням.

💻 Cloud (VPS) Хостинг

  • Від $19.95/міс — Починайте малим, масштабуйте миттєво
  • KVM віртуалізація — Гарантовані ресурси без overselling
  • Миттєві апгрейди — Без простою
  • NVMe сховище — Швидка продуктивність
  • 24/7 підтримка — <10 хв відповідь

🖥️ Виділені Сервери

  • Від $200/міс — Сучасні конфігурації
  • Кастомні конфігурації — Intel або AMD, найсвіжіші моделі
  • Кілька локацій — EU + USA
  • 99.9% uptime — Надійність
  • DDoS захист — Включено
  • Безкоштовна міграція — Ми допоможемо
  • Private Cloud підтримка — Proxmox, VMware, OpenStack

💬 Не впевнені який варіант вам необхідний?
💬 Напишіть нам і ми зі всім допоможемо!

Часті запитання

Як зрозуміти що сервер не справляється з навантаженням?

Головні ознаки: повільне завантаження сторінок, CPU стабільно вище 70-80%, зростання часу відповіді бази даних, часті помилки 502/504. Якщо кешування не допомагає — час переглядати конфігурацію або масштабуватися.

VPS вистачить для high-traffic сайту?

Для більшості середніх сайтів VPS з 8-16 ГБ RAM та NVMe достатньо. Але якщо трафік постійно росте і ви бачите Steal Time або нестабільний TTFB — варто переходити на Dedicated.

Чи потрібен CDN якщо аудиторія в одній країні?

Так. CDN зменшує латентність, знімає навантаження з основного сервера, дає захист від DDoS та кешування статики. Навіть для локальної аудиторії це дає 10-15% покращення.

Як часто переглядати конфігурацію сервера?

Рекомендуємо перевіряти кожні 6 місяців або після помітного зростання трафіку. Оновлення PHP, MySQL чи Nginx можуть значно покращити продуктивність.

Який інструмент для load testing найкращий?

k6 — рекомендуємо для більшості випадків. Сценарії на JavaScript, хороші звіти, легка інтеграція. Для простої перевірки пропускної здатності — wrk. Для складних сценаріїв поведінки — Locust.

Contents

Поділіться цією статтею

VPS з підтримкою від

$19 95 / міс

Виділені сервери від

$80 / міс

CDN починаючи від

$0 / міс

 

Користуючись цим сайтом, ви погоджуєтеся на використання файлів cookies відповідно до нашої Політики Конфіденційності.