Fork me on GitHub

The WebDevil

Enjoy development

“Папа обещал – папа сходил”


Обещался я сделать сравнение разных средств для ускорения работы скриптов. Если кто будет говорить о неточности или неправильности метода тестирования – говорите как лучше, сделаем лучше.

Итак, основным камнем преткновения для проведения тестирования послужило использование Zend Framework. Он использует чрезмерно много загрузок разных файлов, что заметно снижает скорость работы.

Тестовый стенд – ноутбук Asus A6Tc, OS: Linux Ubuntu “Gutsy”, Lighttpd-1.4.17, PHP 5.2.3 через FastCGI.
Тестовое приложение основано на Zend Framework, использует подключение к БД (но не делает выборок), а для View использован Smarty.

Тестировал Pure PHP, Zend Optimizer 3.3.0, XCache 1.2.1, APC 3.0.14, eAccelerator 0.9.5.2.

Тестировал тривиально и просто – замерял время запуска и время окончания внутри скрипта, в конце вывода смарти эхал полученое время. И копипастил его (все действия для чистоты эксперимента проводились с другой машинки) в OO SpreadSheets.

Вот результаты (время в мс):

Pure PHP ZO XCache APC eAccelerator
247.8 272.92 573.43 397.9 156.2
251.04 271.81 106.81 89.75 74.16
245.14 286.8 108.96 88.38 110.42
252.72 267.1 91.01 89.2 534.97
207.39 221.43 65.54 47.49 69.55
209.5 221.34 65.89 53.31 71.01
217.66 232.13 70.04 47.66 70.32
202.88 222.59 66.1 48.04 70.26
203.17 220.79 69.94 54.19 70.76
204.03 235.28 65.76 48.49 70.05

И вот по этому добру график:

opcode cachers diagram

С XCache был замечен баг: если дважды быстро обновить страницу то контент вылазил полтора-два-три раза. Но я думаю это из-за перегенерации шаблона в Smarty. Однако неприятный осадок остался.

Жду комментариев =)

11 Responses to “PHP opcode cachers review”

  1. А нижняя ось – это номер запуска скрипта?

    Denis Soloshenko

  2. Угу. Пускал 10 раз, замеры копипастил. Брявзер и куда копипастил – на другой машинке чтоб не создавать нагрузку в тесте.

    dm

  3. Есть конечно очень большой шанс, что работать это все может еще быстрее, если я правильно разрулю генерацию темплейтов в смарти.

    dm

  4. тоесть замерял ты время средствами РНР?

    bsn

  5. угумс. Если подскажешь как лучше – попробую.

    dm

  6. использует подключение к БД (но не делает выборок)

    Зачем? – это добавляет в только ещё одну стохастическую составляющую. Причем скорее всего доминирующую.

    В итоге этот тест скорее показывает скорость подключения к БД и скорость работы Smarty.
    Учитывая мизерное количество эксперементов делать какие-либо выводы нельзя.

    Для “чистоты эксперемента” выбрось нафик БД и кеширующий смарти.
    Дальше гоняй ApacheBench-ем и проверяй производительность количеством RpS.

    Vadim Voituk

  7. Ок, попробую. В скором времени ждите ;)

    dm

  8. профайлером надо мерять, а не самим РНР :)

    bsn

  9. Используй нагрузочное тестирование. в несколько потоков, с прогревом и без. Рекомендую все же Jmeter – можно написать assertion для выявления ошибок (дупликация контента и т.п.) Очень может быть, что описаный глюк XCache тут вылезет еще…

    schleicher

  10. >bsn
    Хотелось бы померять, но вот есть мысль, что далеко не все будут совместимы с тестируемыми кешерами.

    >schleicher
    Хм. Можно попробовать.

    dm

  11. Правильно спавнивать не Zend Optimizer vs XCache 1.2.1 or APC 3.0.14, а ZO + XCache vs ZO + APC vs Zend GUARD

    KAndy