Оптимизация Symfony приложения с помощью OPcache и APCu

В этой статье я расскажу как ускорить время ответа сервера в 20-40 раз.

Для начала необходимо установить PHP 7.2 и добавить в него расширения OPcache и APCu

Я использую Docker.

RUN touch /usr/local/etc/php/conf.d/custom.ini \
    && echo "memory_limit = 512M;" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "realpath_cache_size = 16M;" >> /usr/local/etc/php/conf.d/custom.ini \
    && echo "realpath_cache_ttl = 7200;" >> /usr/local/etc/php/conf.d/custom.ini 

RUN touch /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.enable=1;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.revalidate_freq=0;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.validate_timestamps=0;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.max_accelerated_files=300000;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.memory_consumption=512;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.max_wasted_percentage=10;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.interned_strings_buffer=64;" >> /usr/local/etc/php/conf.d/opcache.ini \
    && echo "opcache.fast_shutdown=1;" >> /usr/local/etc/php/conf.d/opcache.ini

RUN touch /usr/local/etc/php/conf.d/apcu.ini \
    && echo "apc.enable=1;" >> /usr/local/etc/php/conf.d/apcu.ini \
    && echo "apc.enable_cli=0;" >> /usr/local/etc/php/conf.d/apcu.ini \
    && echo "apc.shm_size=256M;" >> /usr/local/etc/php/conf.d/apcu.ini \
    && echo "apc.mmap_file_mask=/tmp/apc.XXXXXX;" >> /usr/local/etc/php/conf.d/apcu.ini

Далее в конфиге для Doctrine добавить следующее:

doctrine:
    orm:
        metadata_cache_driver: apcu
        result_cache_driver: apcu
        query_cache_driver: apcu
        second_level_cache:
            enabled: true

Если используете сериализацию и валидацию, то надо еще и такие конфиги:

framework:
    validation:
        cache: validator.mapping.cache
    serializer:
        cache: serializer.mapping.cache.apcu

И добавить в конфиги сервисов:

services:
    serializer.mapping.cache.apcu:
        class: Doctrine\Common\Cache\ApcuCache

    doctrine.apcu.cache:
        class: Doctrine\Common\Cache\ApcuCache

    validator.mapping.cache:
        class: Symfony\Component\Validator\Mapping\Cache\DoctrineCache
        arguments: ['@doctrine.apcu.cache']

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code