Unpredictable results with APC 3.1.4 for Windows

From: Date: Fri, 03 Sep 2010 20:35:55 +0000
Subject: Unpredictable results with APC 3.1.4 for Windows
Groups: php.pecl.dev 
Request: Send a blank email to pecl-dev+get-7590@lists.php.net to get a copy of this message
I'm using APC 3.1.4 with Apache 2.2.16 (Win32) and PHP 5.2.14. I obtained php_apc.dll from downloads.php.net/pierre/php_apc-3.1.4-5.2-VC6-x86.zip I am seeing unpredictable results with apc_store() which appears to be adding duplicate entries to the cache instead of replacing the old one. In addition, it often appears to store FALSE instead of the correct value. Setting write_lock and slam_defense on or off doesn't seem to make a difference. I'm not sure if I am using this improperly, have the wrong dll, or if I'm encountering a bug. Apache also appears to be rather unstable - crashing several times per day. I also upgraded Apache and PHP at the same time as implementing APC so I'm not sure what may be contributing to it (nothing in the logs). Thanks, Marco Moreno I figured a picture is worth a thousand words so here you go: <?php // Array of various test values to store in APC cache $test = array( "test-1" => 1, "test-2" => 2, "test-3" => 3, "test-4" => "apple", "test-5" => "banana", "test-6" => "orange", "test-7" => NULL, "test-8" => array("1", "2", "3"), "test-9" => array("cat" => "mouse", "cops" => "robbers"), "test-10" => array( "nuts" => array("pecan", "walnut", "cashew"), "dogs" => array("lab", "lap", "hot"), ), ); // Cache info dump - BEFORE apc_clear_cache("user"); echo "<h3>Cache dump BEFORE via apc_cache_info('user'):</h3>"; echo "<pre>"; print_r(apc_cache_info("user")); echo "</pre>"; echo "<hr />"; // Display original values echo "<h3>Original list of test cases</h3>"; echo "<p><strong>Note that 'test-7' is NULL</strong></p>"; echo "<pre>"; print_r($test); echo "</pre>"; echo "<hr />"; // Number of times to repeat tests $repeat_times = 10; echo "<h3>Runing apc_store()/apc_fetch() $repeat_times times...</h3>"; foreach (range(1,$repeat_times) as $i) { echo "<p><strong>Run #{$i}</strong></p>"; echo "<pre>"; do_test(); echo "</pre>"; } echo "<hr />"; // Cache info dump - AFTER echo "<h3>Cache dump AFTER via apc_cache_info('user'):</h3>"; echo "<pre>"; print_r(apc_cache_info("user")); echo "</pre>"; function do_test() { global $test; foreach (array_keys($test) as $i) { apc_store($i, $test[$i]) or die("Failed storing key '{$i}'"); } foreach (array_keys($test) as $i) { $cache[$i] = apc_fetch("{$i}"); echo "Key '{$i}' "; if ($cache[$i] === $test[$i]) { echo "ok.\n"; } else { echo "FAILED!"; echo "<blockquote>"; echo "Expected:\n"; var_dump($test[$i]); echo "\nReturned:\n"; var_dump($cache[$i]); echo "</blockquote>"; } } } ?> RESULTS: Cache dump BEFORE via apc_cache_info('user'): Array ( [num_slots] => 4099 [ttl] => 7200 [num_hits] => 0 [num_misses] => 0 [num_inserts] => 0 [expunges] => 0 [start_time] => 1283543299 [mem_size] => 0 [num_entries] => 0 [file_upload_progress] => 1 [memory_type] => IPC shared [locking_type] => spin [cache_list] => Array ( ) [deleted_list] => Array ( ) ) Original list of test cases Note that 'test-7' is NULL Array ( [test-1] => 1 [test-2] => 2 [test-3] => 3 [test-4] => apple [test-5] => banana [test-6] => orange [test-7] => [test-8] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [test-9] => Array ( [cat] => mouse [cops] => robbers ) [test-10] => Array ( [nuts] => Array ( [0] => pecan [1] => walnut [2] => cashew ) [dogs] => Array ( [0] => lab [1] => lap [2] => hot ) ) ) Runing apc_store()/apc_fetch() 10 times... Run #1 Key 'test-1' ok. Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' ok. Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #2 Key 'test-1' ok. Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #3 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' FAILED! Expected: int(2) Returned: bool(false) Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #4 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #5 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #6 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #7 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' FAILED! Expected: string(6) "orange" Returned: bool(false) Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #8 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' ok. Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #9 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Run #10 Key 'test-1' FAILED! Expected: int(1) Returned: bool(false) Key 'test-2' ok. Key 'test-3' ok. Key 'test-4' ok. Key 'test-5' ok. Key 'test-6' ok. Key 'test-7' FAILED! Expected: NULL Returned: bool(false) Key 'test-8' ok. Key 'test-9' ok. Key 'test-10' ok. Cache dump AFTER via apc_cache_info('user'): Array ( [num_slots] => 4099 [ttl] => 7200 [num_hits] => 82 [num_misses] => 18 [num_inserts] => 100 [expunges] => 0 [start_time] => 1283543299 [mem_size] => 15608 [num_entries] => 26 [file_upload_progress] => 1 [memory_type] => IPC shared [locking_type] => spin [cache_list] => Array ( [0] => Array ( [info] => test-10 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 1108 ) [1] => Array ( [info] => test-9 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [2] => Array ( [info] => test-8 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [3] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [4] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [5] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [6] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [7] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [8] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [9] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [10] => Array ( [info] => test-7 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [11] => Array ( [info] => test-6 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [12] => Array ( [info] => test-6 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [13] => Array ( [info] => test-5 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [14] => Array ( [info] => test-4 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [15] => Array ( [info] => test-3 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [16] => Array ( [info] => test-2 [ttl] => 0 [type] => user [num_hits] => 1 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [17] => Array ( [info] => test-2 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [18] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [19] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [20] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [21] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [22] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [23] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [24] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) [25] => Array ( [info] => test-1 [ttl] => 0 [type] => user [num_hits] => 0 [mtime] => 1283543299 [creation_time] => 1283543299 [deletion_time] => 0 [access_time] => 1283543299 [ref_count] => 0 [mem_size] => 580 ) ) [deleted_list] => Array ( ) ) APC INFO: APC Support enabled Version 3.1.4 MMAP Support Disabled Locking type spin Locks Revision $Revision: 301663 $ Build Date Aug 10 2010 11:34:45 Directive Local Value Master Value apc.cache_by_default On On apc.canonicalize On On apc.coredump_unmap Off Off apc.enable_cli Off Off apc.enabled On On apc.file_md5 Off Off apc.file_update_protection 2 2 apc.filters no value no value apc.gc_ttl 3600 3600 apc.include_once_override Off Off apc.lazy_classes Off Off apc.lazy_functions Off Off apc.max_file_size 1M 1M apc.num_files_hint 1000 1000 apc.preload_path no value no value apc.report_autofilter Off Off apc.rfc1867 Off Off apc.rfc1867_freq 0 0 apc.rfc1867_name APC_UPLOAD_PROGRESS APC_UPLOAD_PROGRESS apc.rfc1867_prefix upload_ upload_ apc.rfc1867_ttl 3600 3600 apc.shm_segments 1 1 apc.shm_size 256M 256M apc.slam_defense Off Off apc.stat On On apc.stat_ctime Off Off apc.ttl 7200 7200 apc.use_request_time On On apc.user_entries_hint 4096 4096 apc.user_ttl 7200 7200 apc.write_lock Off Off

« previous php.pecl.dev (#7590) next »