Инструкция по поиску узких мест и ускорению

:!: Проверка производительности сервера

Для постоянного «живого» мониторинга скорости ответа страницы можно использовать следующий скрипт:

live-resp.sh
while true; do; curl -s -w %{time_total}\\n -o /dev/null http://site.ru/ ; done

Включение кеширования PHP

Обычно PHP идет с ускорителем типа XCache, eAccelerator, APC, или OPcache. Актуально - OPcache, он стал частью PHP с версии 5.5, другие похоже, что «загнулись».

Какой именно стоит можно из вывода phpinfo() или php -v:

PHP 5.3.3 (cli) (built: Jul 12 2013 20:35:47) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with XCache v3.0.2, Copyright (c) 2005-2013, by mOo
    with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies
    with XCache Optimizer v3.0.2, Copyright (c) 2005-2013, by mOo
    with XCache Cacher v3.0.2, Copyright (c) 2005-2013, by mOo
    with XCache Coverager v3.0.2, Copyright (c) 2005-2013, by mOo

OPcache

Настройки - в php.ini, а также доступны через opcache_get_configuration():

php.ini
[opcache]
; 1 - включен
opcache.enable=1
; размер в Мб
opcache.memory_consumption=256
; максимальное количество файлов в кеше
opcache.max_accelerated_files=20000
; проверять изменения по временной метке, 1 - проверять, 0 - быстро, не проверять, но в случае "ошибок" требуется перезапустить кеш `opcache_reset()` или веб-сервер
opcache.validate_timestamps=1
; как часто (в секундах) делать перепроверку временной метки, 0 - постоянно, 1 - 1 раз в секунду, но не более 1 раза за запрос
opcache.revalidate_freq=2
opcache.force_restart_timeout=180
; в конфиге еще много интересных настроек

Статистика OPcache доступна через phpinfo(), opcache_get_status():

Статистика OPcache

XCache

Надо убедиться что XCache включен и настроен в файле xcache.ini: xcache.size должен быть > 0, размер подбирается опытным путем.

Для просмотра состояния кеша следует:

Включить админку:

xcache.ini
[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.auth = On
xcache.admin.user = "admin"
; set xcache.admin.pass = md5($your_password)
; login use $your_password
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"

Сделать симлинк в дереве веб-документов xcache_html -> /usr/share/xcache.

Разрешить каталоги:

httpd.conf
php_admin_value open_basedir "/usr/share/pear:/etc/xcache/:/usr/share/xcache:/var/www/site.ru/:."

админка XCache

APC

APC включен

Поиск узких мест в PHP

Включение кеша запросов MySQL

Иногда он выключен, быстро это можно проверить так:

mysql -e "SHOW VARIABLES LIKE 'query_cache_%'"

кеш запросов выключен

Здесь кеш запросов выключен, хотя память зарезервирована. Состояние кеша запросов:

mysql -e "SHOW GLOBAL STATUS LIKE 'Qcache%'"

нет ни одного запроса в кеше запросов

Здесь нет ни одного запроса в кеше. Включил таким способом:

query_cache_type = ON
query_cache_limit = 2M
query_cache_size = 256M

Также не забудьте перезагрузить сервер: service mysqld restart. Подробнее о кеше запросов

Тонкая настройка MySQL

Поиск тормозных запросов

Оперативно это делается с помощью Percona Toolkit