Xcache настройка

Як відомо, PHP - інтерпретована мова, тобто кожен раз при зверненні до скрипту, цей скрипт компілюється. Якщо у вас 1 скрипт, то нічого страшного немає, так як час компіляції невелике. Але в сучасних CMS і фреймворках при відображенні сторінки використовується 10-300 окремих php-файлів (простіше кажучи, інклуд). Чим більше інклуд і чим вони важче, тим найдовше виконується процес компіляції.

Для вирішення цієї проблеми придумали зберігати компілює вид скрипта в пам'яті. Існують спеціальні модулі для зберігання откомпіленного коду в пам'яті. Називаються вони акселератори.

Найвідоміші: eAccelerator, APC, XCache. У кожного є свої плюси і мінуси. Я використовую XCache як найбільш швидкий і надійний. Хоча в кожного є своя думка з приводу надійності.

Деякі акселератори дозволяють зберігати в пам'яті не тільки скрипти, але і результати обчислень. Наприклад, вибірки з бази даних. На практиці це виглядає приблизно як зберігання кешу в Memcache. Але я використовую Memcache - так історично склалося.

Адаменко XCache

У XCache є невелика админка для виведення статистики і скидання кешу. Лежить вона зазвичай тут / usr / local / share / examples / xcache / admin /. Тому потрібно винести цю папку куди-небудь в корінь сайту або в свою адмінку, щоб можна було дивитися з браузера. Можете скачати адмінку тут.

Ось так це виглядає у мене

Xcache настройка

Перша таблиця показує загальну статистику. У ній 2 рядки, так як процесор у мене 2-х ядерний і XCache розподіляє кеш по обом ядрам. Усього у мене виділено 512M.

Статистика xCache

повернемося до адмінки (див. картинку вище).

Slots - кількість слотів під кеш. Це я так розумію на скільки частин б'ється виділяється пам'ять. У моєму випадку це 8000. Чим більше це значення, тим швидше йде пошук, але потрібно більше пам'яті.

Size - розмір пам'яті під XCache

Avail - скільки пам'яті залишилося. Як видно у мене її не залишилося. Забиті всі 512 Mb

Clear - кнопка скидання кешу

Hits - скільки звернень до файлів було зроблено

Misses - скільки звернень до файлів було зроблено, але цих файлів в пам'яті не виявилося. Це нормальний процес. Файли міняються - з кешу вони вилітають. Але в моєму випадку все файли просто не влазять в пам'ять, тому їх там немає, і відповідно йдуть промахи.

Clogs - це я так розумію скільки разів ми звернулися за якимись файлами в кеш, але в цей час ці файли ще компілювалися, тобто була блокування.

OOMs - скільки разів файли не потрапили в кеш через брак пам'яті.

Cached - кількість файлів в кеші. Всього у мене 6400 файлів.

налаштування xCache

Що ще не потрібно забувати. Припустимо, ви поміняли якийсь код на крупній проект. Місце в пам'яті звільнилося і на це порожнє місце можуть бути записані файли нізкопосещаемих проектів. Відповідно файли великого проекту не потраплять в кеш. Простіше кажучи, XCache НЕ вміє відслідковувати які файли можна викинути з кешу і помістити на їх місце більш часто запитувані файли (це так званий «гарячий» кеш). Тому потрібно скидати кеш вручну через адмінку.

Нижня таблиця показує які файли кешуються і наскільки ефективно.

Hits - кількість звернень до цього скрипту в пам'яті. Чим більше тим краще. Якщо для деяких файлів довгий час це значення менше 10, то значить цей файл рідко використовується, і лише займає місце в пам'яті.

Size - розмір цього файлу в пам'яті. Ось тут найцікавіше. Виходить, що відкомпільований файл займає в пам'яті в 10 разів більше місця, ніж на диску. OMG!

SrcSize - розмір файлу на диску

Access - як давно зверталися до цього файлу

Create - скільки часу цей файл лежить в кеші

Мій конфиг
xcache.size = 512M
xcache.count = 2
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 0M
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.test = Off
xcache.cacher = On
xcache.stat = On

Як видно, я відключив використання XCache як кешування результатів обчислень (xcache.var_size = 0M). Для цього у мене є Memcache.

Ну і власне результати: прискорення в 2-3 рази. Якщо раніше сторінка генерировалась за 0.3 секунди (з урахуванням Memcache), то тепер 0.1 секунди. Це приклад з одного проекту CMS LiveStreet.