Чекліст з оптимізації VPS на PHP
Як забезпечити більш високу продуктивність VPS сервера, який працює на Nginx + PHP + MySQL? У цій статті наведено чекліст основних налаштувань, які дозволять суттєво оптимізувати роботу сервера. Налаштування займе не більше 10 хвилин і не потребує нічого, крім редагування файлів конфігурації. Приклади налаштувань наведені для операційної системи Debian 7 та VPS сервера з 1 процесором та 512Мб оперативної пам'яті.
Налаштування виконуються у файлі/etc/nginx/nginx.conf, а також у налаштуваннях віртуального хоста (зазвичай у папці/etc/nginx/sites-enabled)
Кількість воркерів
Кількість воркерів nginx'a має збігатися з кількістю ядер:
Cache-Control заголовки
Встановлення заголовків Cache-Control дозволить суттєво розвантажити Ваш сервер від повторних звернень до файлів, які не змінюються (або змінюються рідко, наприклад css/js/jpg/png/gif):
Access log
Зайві дискові операції через запис логів нам не потрібні, відключаємо:
Unix socket'и
Включаємо unix-сокети для роботи з PHP:
Налаштування виконуються у файлі конфігурації fpmphp-fpm.conf, який у нашому випадку знаходиться тут/etc/php5/fpm/pool.d/www.conf.
Unix socket'и
Переконуємось, що php-fpm працює з unix-сокетами, а не з tcp:
Встановлюємо розширення APC – внутрішній кеш PHP, який дозволить суттєво заощадити ресурси парсеру PHP:
Налаштування MySQL
Усі налаштування MySQL виконуються у файліmy.cnf, який зазвичай знаходиться тут/etc/my.cnf.
key_buffer
Якщо Ви використовуєте лише MyISAM таблиці, встановлюйте це значення 30%. 40% усієї доступної оперативної пам'яті на сервері:
innodb_buffer_pool_size
Якщо ви використовуєте лише InnoDB таблиці, встановлюйте це значення максимально можливим (80% доступної пам'яті). У нашому випадку встановлюємо:
Увага, встановлювати таке знання можна лише значно зменшивши '''key_buffer'''. Тобто. між цими двома налаштуваннями необхідно зробити вибір, який залежить від типу використовуваних таблиць (MyISAM чи InnoDB).
innodb_flush_log_at_trx_commit
Значного прискорення запису для таблиць innoDB можна досягти встановленням цього параметра в 0, коли буфер запису скидатиметься на диск не після кожної операції, а раз на секунду:
innodb_flush_method
Встановлення цієї опції O_DIRECT дозволяє уникнути подвійного кешування (вона вимикає операційний кеш для файлів даних MySQL):
thread_cache_size
Ця опція визначає розмір кешу для створених тредів. Підбирається експериментально, але краще стартове знання збільшити до 16:
query_cache_size
Включаємо внутрішній кеш MySQL:
Значення варто збільшувати за необхідності. Не слід забувати, що кеш перестає працювати ефективно на таблицях, які часто оновлюються.
Як резюме — короткий список із виділеними найбільш важливими налаштуваннями:
- Nginx
- worker_processes
- expires maxдля статики
- access_log off
- unix-сокети
Наведені статті містять детальніший опис даних налаштувань, а також додаткові методи оптимізації серверної частини.
Хардкорна конфа за С++. Ми запрошуємо лише профі.
Читають зараз
Моніторинг PostgreSQL + php-fpm + nginx + диск за допомогою Zabbix
Установка php5.5+php-fpm+mysql+nginx на Mac OS X Mavericks
Налаштування Nginx + LAMP сервера в домашніх умовах Частина 2: Налаштування backend: PHP + MySQL
Запитання та відповідіУ чому проблема коду? Чому дані не додаються до бази даних?
Як працює System.Data.Common на c#?
Як перенести частину даних з однієї таблиці в іншу з значенням одного з полів, що дублюється?
Що скажете про завантаження картинок?
Є вразливості у PHP-Lua та регулярок?
Коментарі 21
Спірно. Кількість воркерів має відповідати кількості жорстких дисків, з яких береться статика. Т.к. Тут важливо не кількість процесорів, а кількість потенційних потоків блокуючих операцій.
Переглянув офіційну документацію, насправді навіть так: The optimal value depends on many factors including (але не обмежений до) номера CPU cores, number of hard disk drives that store data, and load pattern. Коли один є в ліжку, налаштувати його на кількість наявних CPU-коресів буде бути хорошим запуском (Визначення “auto”буде вірно в autodetect it).