ускорение сайта с помощью php-apc


Еще один способ ускорить ваш сайт, работающий на PHP — использовать расширение php-apc.

Это раширение PHP для кэширования и оптимизации промежуточного кода. Кроме того оно кэширует уже откомпилированный код. Таким образом, при повторном обращении к php-скрипту он не будет тратить время на чтение с диска, а также на компиляцию. Наш сервер работает на Debian, используя стандартный PHP и Apache, установленные из репозиториев, поэтому будем рассматривать установку расширения php-apc в этом дистрибутиве.

  1. Установим:

    aptitude install php53-apc
    aptitude install php-apc
    
  2. Включим его в конфигурационном файле и настроим:

    echo "
    [APC]
    extension=apc.so
    apc.enabled=1
    apc.shm_segments=1
    apc.shm_size=32  // -- количество памяти под кэш, в МБ.
    apc.ttl=7200
    apc.user_ttl=7200
    apc.num_files_hint=1024
    apc.mmap_file_mask=/tmp/apc.XXXXXX
    apc.max_file_size = 200M
    apc.post_max_size = 200M
    apc.upload_max_filesize = 200M
    apc.enable_cli=1
    apc.rfc1867=1" >> /etc/php5/apache2/php.ini
    
  3. Рассмотрим основные настройки, на которые стоит обратить внимание:

    • apc.enabled – использовать apc или нет.
    • apc.shm_segments – количество сегментов shared memory, которые будет использовать apc. Некоторые системы имеют ограничение на максимальный размер сегмента, поэтому можно настроить apc на использование нескольких сегментов.
    • apc.shm_size – размер одного сегмента shared memory, используемого apc.
    • apc.ttl – сколько секунд должны отсутствовать обращения к записи кэша прежде, чем apc перезапишет ее.
    • apc.user_ttl – по описанию тоже самое, что и apc.ttl. Обычно устанавливается равным apc.ttl.
    • apc.stat – указывает, нужно ли apc проверять время модифицирования php-скрипта. Если установить в 0, то apc не будет проверять изменения на диске и будет выдавать кэшированную копию.
  4. Перезапустим Apache:

    service apache2 restart
    
  5. Проверяем, насколько быстей стал работать наш сайт. Например, вот сравнение производительности по basicstate.com - daily uptime and performance report.

    ДО

    ----------------------------------------------------------------------
    date          uptime       dns   connect   request      ttfb      ttlb
    
    2012-02-21     97.94     0.090     0.208     0.208     0.689     0.799
    2012-02-20    100.00     0.042     0.159     0.159     0.612     0.719
    2012-02-19     97.94     0.037     0.395     0.395     0.897     1.187
    2012-02-18     97.94     0.072     0.274     0.274     1.106     1.479
    

    ПОСЛЕ

    ----------------------------------------------------------------------
    date          uptime       dns   connect   request      ttfb      ttlb
    
    2012-03-22    100.00     0.013     0.113     0.114     0.320     0.516
    2012-03-21    100.00     0.015     0.115     0.115     0.318     0.514
    2012-03-20    100.00     0.012     0.112     0.112     0.315     0.511
    2012-03-19    100.00     0.012     0.111     0.112     0.315     0.511
    

    ttfb ­— time to first byte (время, затраченное до загрузки первого байта)

    ttlb — time to last byte (время, затраченное до загрузки последнего байта)

comments powered by Disqus