Потеря доступа к кэшу в APC PHP для ключа - PullRequest
25 голосов
/ 13 февраля 2011

Я получаю эту ошибку при попытке использовать apc_store(). Я прогуглил его и увидел, что это ошибка APC timebomb , и увидел некоторые исправления, которые предлагали добавить apc.slam_defense = Off; в php.ini.

Мне нужно знать, произошло ли это из-за ошибки программирования, и если да, то как это исправить.

Это сегмент кода:

if ($data = apc_fetch("foo")) {
    $an_array = $data;
} else {
    /* couple of lines */

    apc_store("circles", $an_array); // This is where I get the error
}

Этот скрипт будет часто вызываться в моей развернутой системе.

Я надеюсь, что предоставил достаточно информации

Заранее спасибо

Ответы [ 4 ]

28 голосов
/ 24 июня 2011

Установка apc.write_lock = 1 и apc.slam_defense = 0 в php.ini должна решить проблему.

15 голосов
/ 31 марта 2011

Начиная с APC 3.1.3, кажется, что есть ошибка (http://pecl.php.net/bugs/bug.php?id=16814), предупреждение сделано, когда включена защита slam и когда вы пытаетесь написать ключ, который уже существует.
Кажется, еще не исправлено.

5 голосов
/ 21 февраля 2013

Последние версии APC, кажется, решают проблему, вы можете обновить APC с помощью PECL

pecl upgrade apc
2 голосов
/ 07 февраля 2013

Эти инструкции зависят от того, как установлен PHP.

Но в вашем /etc/php5/cgi/conf.d/extensions.ini файле (или apc.ini, или php.ini) после добавления extension=apc.so вы можете отключить защиту от хлопка

Например, это моя конфигурация, которую я использую.

[apc]
apc.enabled=1
apc.shm_size=48M
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
apc.stat=1
apc.enable_cli=On
apc.write_lock = 1 
apc.slam_defense = 0 # <----- This is the Important Setting
...