Анкета для регистрации интернет-ресурса
В соответствии с Указом Президента Республики Беларусь № 60 от 01.02.2010г.
Техподдержка
Приложение support.by

E-mail: ticket@support.by

 

Портал > База знаний > Администрирование Linux > Оптимизация PHP. Часть 2


Оптимизация PHP. Часть 2




eAccelerator

eAccelerator - это свободный opensource-проект, выполняющий роли акселератора, оптимизатора и распаковщика. Также встроены функции динамического кэширования контента. eAccelerator повышает производительность работы PHP-скриптов за счет кэширования скомпилированного байт-кода, таким образом издержки на процесс компиляции ликвидируются. Также он оптимизирует скрипты для ускорения времени их исполнения. eAccelerator обычно снижает нагрузку на сервер и увеличивает скорость работы php кода в 1-10 раз. eAccelerator сохраняет скомпилированый PHP-код сначала в общей памяти, затем на диске, все время поддерживая размер занятой памяти оптимальным для производительной работы приложений. Поддерживает PHP4 и PHP5, включая 5.3.

Установка eAccelerator: 

 #apt-get install php5-dev 
Загрузите архив с исходными кодами eAccelerator: 
 #wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2 
Распаковка архива:
 #tar jxvf eaccelerator-0.9.5.tar.bz2
#cd eaccelerator-0.9.5 
Далее необходимо запустить phpize для создания config-файлов, необходимых для сборки:
#phpize
#./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config
#make
#make install
cp modules/eaccelerator.so path-to-php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/
Акселератор установлен. 

Теперь необходимо отредактировать файл path-to-php.ini/php.ini для пользователей php и добавить в него следующие параметры для подключения расширения: 

 #vi path-to-php/php.ini
extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/tmp/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

Максимальный размер кэша в мегабайтах:

 eaccelerator.shm_size="512" 

Корневой каталог для хранения кэша:

 eaccelerator.cache_dir="/var/cache/eaccelerator" 

Включение акселератора:

 eaccelerator.enable="1" 

Подключить или отключить встроенный оптимайзер, которые увеличивает скорость выполнения кода:

eaccelerator.optimizer="1" 

Включает проверку модификации PHP файлов:

 eaccelerator.check_mtime="1" 

Режим отладки. Если поставить 1 или вообще забыть упомянуть этот параметр, при большой посещаемости загадит логи Apache за считанные часы:

 eaccelerator.debug="0" 

Здесь можно определить можно определить, какие файлы должны быть кэшированы. По-умолчанию, если здесь ничего не указано, то кэшируются все файлы:

 eaccelerator.filter="" 

Максимально допустимое значение которое может быть отправлено в разделяемую память. По-умолчанию, "ноль" - без ограничений. Размер указывается в байтах, но можно указать приставки, например: 10240, 10K, 1M:

 eaccelerator.shm_max="0" 

Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить файлы, которые не были запрошены в течении последних "shm_ttl" секунд. По-умолчанию, это значение равно "0" - не удалять ничего:

eaccelerator.shm_ttl="0" 

Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить старые скрипты, если предыдущие такие попытки были не больше, чем "shm_prune_period" секунд назад.По-умолчанию, это значение равно "0" - не удалять ничего:

 eaccelerator.shm_prune_period="0" 

Включить или отключить кэширование скомпилированных скриптов _только_ на диск. Этот параметр не влияет на данные сессий и кэширование контента. По-умолчанию, значение 0, означает, что данные будут кэшироваться и в памяти и на диске:

 eaccelerator.shm_only="0" 

Включить или отключить сжатие закэшированного контента. По-умолчанию, "1" - сжимать:

 eaccelerator.compress="0" 

Уровень сжатия. По-умолчанию, "9" - максимум:

 eaccelerator.compress_level="3"  

Создание cache-директории. Последний важный шаг в настройке акселератора - это создание директории для кэша, имя которой мы задавали в конфигурационном файле. Значение по умолчанию - /tmp/eaccelerator, потому что права на запись в папку /tmp обычно есть у всех пользователей

Не очень хорошим решением будет оставлять права на запись для всех пользователей. Более безопасным будет сменить владельца директории eaccelerator на пользователя, от имени которого запущен PHP (в большинстве случаев это web-сервер. Например apache или lighttpd) и установить на нее права 0644

#mkdir /tmp/eaccelerator
#chown nobody:nobody /tmp/eaccelerator (либо указать пользователя PHP вместо nobody)
#chmod 0644 /tmp/eaccelerator  

Для вступления настроек в силу необходимо перезагрузить web-сервер.

 #/etc/init.d/apache2 restart 
На этом настройка eAccelerator закончена Если при доступе к созданному файлу с кодом:
 <?php
phpinfo();
?> 
видно информацию о eAccelerator, то все установлено корректно. 

Xcache

Поддерживает функции оптимизации скриптов, кэширования байт-кода в оперативную память, кэширования пользовательских данных в shared memory, простого профилирования работы скриптов. Имеет собственный GUI, наличие и использование которого, однако, не обязательно для функционирования пакета. Бесплатен. XCache решает большинство проблем, которые присутствуют у других акселераторов. Например, возможность использования с более новыми версиями PHP. Проект живет и развивается. Поддерживает PHP4 и PHP5, включая 5.5. Xcache очень агрессивно кэширует байт-код php и после того как он был закэширован в памяти, оптимизатор попросту перестаёт проверять (или делает это крайне редко) был ли оригинальный скрипт изменён на диске. Это приводит к тому, что если работает xcache и вы отредактировали свой php файл, то изменения в работе скрипта вы увидите далеко не сразу, т.к. xcache попросту не подгрузит их из файла и не скомпилирует, а просто подставит данные из кэша. Его версии выходят чаще, а так же его обещают включить в стандартную поставку php6

Установка XCache

Для установки необходимо выполнить:

 #apt-get install php5-xcache 
Далее необходимо отредактировать файл /etc/php5/apache2/php.ini и добавить в него следующие значения:
 extension = xcache.so 

 После установки файл конфигурации в /etc/php5/conf.d/xcache.ini будет выглядеть примерно так:

 xcache.size = 128M
xcache.count = 14
xcache.slots = 8K
xcache.ttl = 36000
xcache.gc_interval = 36000
xcache.var_size = 8M
xcache.var_count = 14
xcache.var_slots = 8K
xcache.var_ttl = 36000
xcache.var_maxttl = 604800
xcache.cacher = On
xcache.stat = On  

Основные параметры:

xcache.size - отвечает за количество памяти для хранения кэша. Если значение будет слишком маленьким, то эффекта от кэширования толком не будет.

xcache.count — количество блоков, на которые будет делиться кэш. Рекомендуется выставлять по количеству ядер процессора.

xcache.slots - Количество слотов под кэш, чем больше слотов, тем больше скорость поиска в кэше. Но и увеличивается потребление памяти. Рекомендуется оставлять значение по умолчанию: 8K

xcache.ttl - Время жизни кэшированного объекта в секундах. Если к объекту никто не обращался в течении указанного времени, объект помечается как не используемый, и в последующем удаляется из кеша сборщиком мусора.

xcache.gc_interval — интервал запуска сборщика мусора в секундах. Определяет промежуток времени, через который будет запускаться сборщик мусора. Запустившись, он ищет записи с истекшим временем жизни (xcache.ttl) и удаляет их из кэша.

После настроек необходимо перезапустить веб-сервер:

 #/etc/init.d/apache2 restart  

Что такое Memcache и какое отношение он имеет к PHP?

Memcache разработан для кэширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная с результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Memcached не входит в базовый набор модулей, поставляемых с PHP, однако он доступен в репозитории pecl.

Установка и настройка Memcache:

Модуль Memcached для PHP доступен в репозитории уже скомпилированным (php5-memcached), но я опишу процесс установки из исходного кода, так как не все репозитории настолько богаты, как дебиановский. 

Устанавливаем сервер Memcached:

#apt-get install memcached 

Для начала, хватит следующих правок конфигурационного файла:

#/etc/memcached.conf 

Memcached будет работать, как демон:

-d 

Путь для лога:

logfile /var/log/memcached.log  

Отведём 256 мегабайт ОЗУ под хранилище:

-m 256 <code>
<code | Слушать будет этот порт:>
-p 11211 

В последствии желательно поменять:

-u nobody 

Слушаем localhost:

-l 127.0.0.1  

Перезапускаем memcache

 #/etc/init.d/memcached restart
# max connection 2048 MAXCONN="2048" # set ram size to 2048 - 2GiB CACHESIZE="4096  

Далее проверяем, запустился ли memcached:

# netstat -tap | grep memcached 

В случае успеха, получим результат:

tcp 0 0 localhost:11211 *:* LISTEN 13036/memcached  

Компилируем и устанавливаем модуль для PHP:

apt-get install php5-memcached
apt-get install php5-dev libmemcache-dev
pecl download memcache
tar xzvf memcache-2.2.6.tgz
cd memcache-2.2.6/
phpize && ./configure --enable-memcache && make
cp modules/memcache.so /usr/lib/php5/20060613/
echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart  

При перезапуске memcached весь кэш теряется. 

Настройки memcached:

STAT maxbytes 134217728
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 11211
STAT inter 127.0.0.1
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 1048576
Смотрите так же:


Помог ли вам данный ответ?

Добавить в избранное Добавить в избранное    Распечатать статью Распечатать статью

Также читают
Оптимизация PHP. Часть 1 (просмотров: 1568)
Установка Ioncube (просмотров: 849)

Powered by WHMCompleteSolution