Шпаргалка по HighLoad оптимизации веб-сервера
Условия: 1 физический сервер/VPS/VDS + PHP + MYSQLЦель: ускорение сервера в 10-50 раз, как минимум

Ниже список, на что стоит обратить внимание при оптимизации сервера.
Браться за все подряд смысла нет, все зависит от конкретной ситуации и ее bottleneck.
- Диагностика, мониторинг и профилирование
- munin, cacti
- диски:
df -h, iotop, mpstat, iostat, sar, lsof, smartctl, dd
hdparm -I, hdparm -t, iozone, bonnie++ - процессы/память: ps aux, top, htop, vmstat, pstree, strace, watch, free -m, lsmod
- сеть: tcpdump, netstat, iptraf
- web server: ab(ApacheBench), httperf
- другие инструменты диагностики
- Оптимизация ОС и общие советы
- анализ /var/logs
- если логи не нужны, лучше их вырубить, либо настроить logrotate
- ФС: XFS для быстрого чтения и больших файлов, ext3/4 — универсальны
- монтирование ФС: relatime(или noatime), async
- проверка стабильности и работоспобности dns resolve, переход на 8.8.8.8 и 8.8.4.4
- Веб-сервер фронтенд Nginx
- проверить worker_processes, worker_connections, %events_module% (kqueue — freebsd, epoll — linux), worker_priority
- unix сокеты вместо IP сокетов
- 304 http headers на всю статику, на месяц: expires 30d
- gzip on
- gzip_static on (ngx_http_gzip_static_module); «for i in `find ./* -type f -name ‘*.js’`; do echo $i; gzip -c -9 $i > $i.gz; done;»
- отключить логи статики: access_log off
- try_files вместо «if (… !-f)»
- fastcgi_cache
- aio on — поддержка асинхронного IO в nginx, подробнее
- sendfile on — если без aio
- open_file_cache
- timer_resolution 100ms — уменьшает частоту вызова функции таймера
- Веб-сервер бекенд PHP-FPM (забыть про апач(httpd) навсегда)
- php-акселераторы(opcode кеширование): apc или xcache
- отключить лишние(неиспользуемые) модули PHP
- связь с фронтендом через unix-сокет
- Сервер Баз Данных MySQL
на уровне конфига и анализа логов:
Авторские права на представленный материал принадлежат администрации сайта http://chesser.ru, при копировании контента ссылка на источник обязательна.
- анализ переменных статистики работы сервера (tuning-primer.sh, mysqltuner, иногда phpMyAdmin). Настройка /etc/my.conf и расчет потребляемой памяти mysql
- профилирование slow queries (можно с помощью mysqlsla)
- кеширование SQL-запросов на уровне БД
- поднятие лимитов на файловые хендлеры в ОС, нужно для оптимизации работы временных таблиц в виртуальной памяти
- поднятие лимитов на коннекты к серверу БД
- расширение/подгон буферов памяти под работающий софт/данные
- myisam -> innodb или наоборот
- добавление обычных, мультиколонных индексов, а также FORCE INDEX в проблемные таблицы
- отказ/пересмотр запросов с wildcard-символами и сокращение фуллсканов
- использование DELAYED запросов, мульти (bulk) вставки/апдейты, statements
- использование PREPARED STATEMENTS
- по возможности вмесло php-mysql использовать php-mysqli в купе с mysqlnd
- если данные помещаются в памяти, то некоторые SQL-запросы можно выполнять через api — см. HandlerSocket
- Оптимизация приложений
- использование APC var-кеширования, либо(что хуже) memcached/redis/nosql…
- анализ и доработка запросов к БД
- замещение штатных сервисов приложения внешними. Например, замена стандартной функции поиска на SphinxSearch
- сокращение http запросов к вебсерверу, объединение отдаваемых http ресурсов, иногда CSS sprites
Справочник по популярным unix/linux командам
Комментариев нет:
Отправить комментарий