PHP APC Potential Cache Slam Averted for Key

2019-03-17 09:27发布

问题:

I'm receiving this error while trying to use apc_store(). I googled it and saw that this was APC timebomb bug and saw some fixes which suggested adding apc.slam_defense = Off; to php.ini.

I need to know whether this has happened because of a programming error, and if yes, how to fix it.

This is the code segment:

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

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

This script will be called frequently in my deployed system.

I hope I've provided enough info

Thanks in advance

回答1:

Since APC 3.1.3, it seems there is a bug (http://pecl.php.net/bugs/bug.php?id=16814), warning are made when slam defense is at on and when you try to write a key that already exists.
Does not seem to be fixed yet.



回答2:

Setting apc.write_lock = 1 and apc.slam_defense = 0 in php.ini should fix the problem.



回答3:

Last versions of APC seems to resolve problem, you can update APC with PECL

pecl upgrade apc


回答4:

These instructions will vary based on how PHP is installed.

But, in your /etc/php5/cgi/conf.d/extensions.ini file (or apc.ini, or php.ini) after you have added your extension=apc.so you can disable the slam defense

For example, this is my configuration that I use.

[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


标签: php apache2 apc