2012-04-13 63 views
1

我們得到了一臺裝有Magento 1.4.2 CE的服務器,安裝了APC 3.1.9並將Magento配置爲將其用作後端緩存。Magento 1.4.2 + APC:清除緩存對更改設置沒有影響

我們經歷了一個奇怪的行爲與緩存。直到apache2重新啓動/ APC操作碼高速緩存已被清除,纔會顯示我們在後端進行的每次更改。這包括例如更改歡迎消息或激活/停用Google Analytics。

問題:爲什麼APC緩存整頁?我們不希望這種行爲,它似乎不是標準的。對於後端的每一個小改動,我們都需要清除操作碼緩存。清除Magento緩存沒有幫助。

爲了完整起見,這裏是我們/etc/php5/conf.d/apc.ini

extension=/usr/lib/php5/20090626/apc.so 
apc.enabled=1 
apc.file_update_protection=2 
apc.optimization=0 
apc.shm_size=128M 
apc.include_once_override=0 
apc.shm_segments=1 
apc.gc_ttl=7200 
apc.ttl=7200 
apc.num_files_hint=1024 
apc.enable_cli=0 

啓用/禁用谷歌Analytics(分析)也將有7200 TTL後沒有效果。也許是因爲我們的緩存目前沒有運行完整。其容量的40%被使用,命中率約爲98%。

這是apc.php輸出完整的設置:

apc.cache_by_default 1 
apc.canonicalize  1 
apc.coredump_unmap  0 
apc.enable_cli  0 
apc.enabled   1 
apc.file_md5  0 
apc.file_update_protection 2 
apc.filters 
apc.gc_ttl   7200 
apc.include_once_override 0 
apc.lazy_classes  0 
apc.lazy_functions  0 
apc.max_file_size  1M 
apc.mmap_file_mask 
apc.num_files_hint  1024 
apc.preload_path  
apc.report_autofilter 0 
apc.rfc1867   0 
apc.rfc1867_freq  0 
apc.rfc1867_name  APC_UPLOAD_PROGRESS 
apc.rfc1867_prefix  upload_ 
apc.rfc1867_ttl  3600 
apc.serializer  default 
apc.shm_segments  1 
apc.shm_size  128M 
apc.slam_defense  1 
apc.stat   1 
apc.stat_ctime  0 
apc.ttl   7200 
apc.use_request_time 1 
apc.user_entries_hint 4096 
apc.user_ttl  0 
apc.write_lock  1 
+0

我得到了禁用Magento後端緩存的提示,因爲它比APC操作碼緩存本身對性能的影響更小。 取消激活local.xml中的緩存並清除var/cache確實有幫助。這些商店幾乎和以前一樣快,但每當我改變一個設置時,我必須清除操作碼緩存的錯誤消失了。 – SebiF 2012-04-13 14:59:57

回答

1

APC一直都在終端和基於web緩存。由於您只能從基於Web的URL調用而不是命令行清除「Web」緩存命中,因此重新啓動Apache後將清除APC基於Web的緩存。您很可能需要設置一個腳本來用類似的腳本清除緩存,因此您只需從CLI或腳本中調用它即可。

echo "Clearing APC web cache\n"; 
system('wget --spider --quiet http://localhost/clear_apc_cache.php'); 

echo "Clearing APC command line user cache\n"; 
apc_clear_cache('user'); 

echo "Clearing APC command line opcode cache\n"; 
apc_clear_cache(); 

顯然,你就需要使用相同的兩個APC內部方法創建clear_apc_cache.php相應的文件中調用,apc_clear_cache();apc_clear_cache('user');

而且,我會設置一個局域網,查看APC緩存還有:

http://www.electrictoolbox.com/apc-php-cache-information/

+0

好吧,這不是關於修復Magento怪異的行爲,但是不必每次都不必重新啓動web服務器。所以這被接受。順便說一句。我們已經運行了緩存信息,請參閱文本中對apc.php的引用。 – SebiF 2012-04-16 07:31:55

0

您還可以設置apc.stat爲零。 (apc.stat = 0)在你的PHP.ini文件中。

如果它設置爲1,它不會查找文件更新,這會提供更好的性能,但需要在更新後重新啓動apache。設置爲0它將檢查文件更新並將它們添加到緩存中(即,您的更新將在網站上可見)。

+1

我很遺憾地告訴你,這是錯誤的。它完全相反。 apc.stat = 1將讓APC檢查已更改的文件,而apc.stat = 0將禁用對已更改文件的檢查。在問題的配置中選擇的設置是可以的。參見[php手冊](http://www.php.net/manual/de/apc.configuration.php#ini.apc.stat) – SebiF 2012-07-05 18:34:21