Технічні питання
Помилка 503 Служба тимчасово недоступна
Кожному обліковому запису на сервері виділяється певна кількість робочих процесів (воркери Apache mpm-itk), які обробляють запити користувачів. Запити надходять на сервер і ставляться в чергу. Легкі запити обробляються швидко, а важкі проблемні - повільно, сповільнюючи просування черги. Коли довжина черги досягає певного значення, сервер перестає приймати нові запити, повертаючи помилку 503 (Service Temporarily Unavailable, служба тимчасово недоступна).
Нижче наведені найпоширеніші причини великої черги, а також способи вирішення цієї проблеми:
1. Велика кількість запитів до веб-сервера:
- Завантажений ресурс пошкоджений/містить посилання на занадто багато файлів (картинки, таблиці стилів, JS-скрипти), які завантажуються через окремі запити. Спробуйте об’єднати ресурси в один файл, де це можливо.
- На сайті встановлений елемент, який періодично відправляє AJAX запити на сервер (наприклад, чат). Кількість запитів залежить не тільки від кількості відвідувачів, а й від їхньої звички відкривати кілька вкладок у браузері.
- Використання елементів ресурсів або скриптів на чужих сайтах (посилання на картинки, скрипти інформерів).
- DDoS-атаки.
2. Велика кількість «важких» або пошкоджених компонентів CMS.
Перевірте всі компоненти та плагіни вашої CMS, відключаючи їх по черзі, і знайдіть найважчі або пошкоджені, які сповільнюють завантаження сайту. По можливості відмовтеся від таких компонентів, або пошукайте більш швидкий аналог. Також видаліть будь-які непотрібні компоненти, якими ви не користуєтеся або використання яких не є необхідним.
3. Велика кількість повільних запитів до MySQL.
Встановіть компоненти кешування в механізм, які можуть зменшити кількість SQL-запитів.
Оптимізація запитів SQL.
Індексуйте таблиці бази даних за стовпцями, які використовуються у виборі
Якщо нічого не допомагає, можливо, варто змінити двигун на більш оптимальний.
4. Передача великих статичних файлів через PHP.
Великі статичні файли краще передавати безпосередньо, без використання скриптів. На це є дві причини: по-перше, обмежений час роботи скриптів, після чого передача файлів переривається; по-друге, для передачі файлу через PHP використовується окремий робочий процес, тобто він припиняє участь у механізмі обробки запитів від користувачів.
5. Підключення до віддаленого сервера.
Якщо сценарії PHP використовують функції Include, які завантажують частини механізму, розташовані в тому самому обліковому записі, переконайтеся, що вони використовують локальний шлях, а не URL-адресу, наприклад "http://...". Наявність URL-адреси змушує сервер робити додатковий HTTP-запит - це забирає додатковий робочий процес і значно сповільнює завантаження сайту.
6. Список розсилки
Запуск скрипта розсилки найкраще розмістити в системі cron, керування яким знаходиться на панелі керування. І запланувати його запуск на час найменшого навантаження на сервер (ніч за київським і московським часом).