Как проверить, работает ли кэш кода операции APC в PHP? - PullRequest
26 голосов
/ 16 февраля 2011

Я использую PHP с включенным кешем APC:

apc.cache_by_default => On
apc.enabled => On
apc.ttl => 7200

Теперь, как узнать, использует ли он кэш кода операции на 100%.

Например, допустим, у меня есть этот файл PHP:

<?php
echo "Hi there";
?>

Теперь, после запуска этого файла, давайте изменим его на echo "Bye there";

Разве это не должно повторить "Привет!", Поскольку TTL 7200 секунд еще не закончился? Я прав? Если так, то почему это повторяет "Пока там"? И если я ошибаюсь, как заставить его использовать кэш кода операции даже после изменения файла?

Ответы [ 3 ]

21 голосов
/ 13 июля 2013

Самый простой способ узнать, работает ли APC, - создать новый файл PHP, содержащий этот код ...

<pre><?php
print_r(apc_cache_info());

Он выводит содержимое apc_cache_info () на экран (будьте осторожны, на большом живом сайте это может быть много данных!).

Каждый раз, когда вы перезагружаете этот PHP-файл, вы должны увидеть num_hits увеличение, что означает, что код операциикеш был использован.Отсутствие указывает, что APC пришлось перекомпилировать файл из источника (обычно это делается при каждом изменении).


Для более приятного интерфейса с этой информацией вы можете использовать файл apc.phpчто идет с APC.Я скопировал это в каталог моего веб-сайта с помощью этой команды консоли (расположение вашей папки может отличаться) ...

cp /usr/share/doc/php-apc/apc.php /usr/share/nginx/html/apc-stats.php

Запуск этого файла в вашем браузере дает вам хорошие цвета и графики!

image

См. Эту ссылку для получения дополнительной информации:
http://www.electrictoolbox.com/apc-php-cache-information/

19 голосов
/ 16 февраля 2011

Не думаю, что вы захотите сделать это в производстве, но вы всегда можете использовать apc_cache_info().

function is_file_cached($file) {
    $info = apc_cache_info();
    foreach ($info['cache_list'] as $cache) {
        if ($cache['filename'] == $file) return true;
    }
    return false;
}

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

А что касается вашего конкретного вопроса, APC автоматически аннулирует кэш для файла при его изменении. Поэтому, когда вы редактируете файл, APC автоматически обнаруживает это и передает новый файл. Вы можете отключить это, установив apc.stat = 0.

9 голосов
/ 16 февраля 2011

Обычно APC проверяет, был ли запрошенный файл изменен с момента его кэширования.Вы можете контролировать это с помощью apc.stat .

...