当ttl设置为0时,wincache ucache被清除

时间:2014-01-20 14:08:16

标签: php iis iis-7 memcached

我在我的PHP.ini中使用以下内容在IIS7上运行wincache

wincache.ucachesize = "80"
wincache.ttlmax = "0"
wincache.fcenabled = "0"

我使用ucache存储从数据库收集的一些繁重数据。

例如:

    Array
    (
        [memory_total] => 83886080
        [memory_free] => 57166036
        [num_used_blks] => 85188
        [num_free_blks] => 1
        [memory_overhead] => 1363056
    )

以及一些示例项目:

  [ucache_entries] => Array
        (
            [1] => Array
                (
                    [key_name] => ***edited***
                    [value_type] => array
                    [value_size] => 68214
                    [ttl_seconds] => 0
                    [age_seconds] => 126
                    [hitcount] => 2
                )

            [2] => Array
                (
                    [key_name] => ***edited***
                    [value_type] => array
                    [value_size] => 88
                    [ttl_seconds] => 0
                    [age_seconds] => 354
                    [hitcount] => 0
                )

            [3] => Array
                (
                    [key_name] => ***edited***
                    [value_type] => array
                    [value_size] => 833553
                    [ttl_seconds] => 0
                    [age_seconds] => 122
                    [hitcount] => 1
                )

现在,问题是当我暂时不使用应用程序时(有时像30分钟?)缓存完全清除。这是我设置ttl =“0”的时候。根据PHP网站:

  

wincache.ttlmax整数:       定义未使用的高速缓存条目的最长生存时间(以秒为单位)。将其设置为0将禁用缓存清理程序,因此在IIS工作进程的生命周期内,缓存的条目永远不会从缓存中删除。

我在IIS日志记录中找不到任何特别的东西,我也不知道如何调试这个。有人得到了一些答案或提示吗?

2 个答案:

答案 0 :(得分:1)

我没有解决方案,但是从我读过的内容中看到的FastCGI在一些空闲时间之后杀死了实例并且用户缓存随之而来。可以将IIS配置为变通方法,但我敢打赌,存在更好的解决方案。

答案 1 :(得分:0)

如果托管解决方案每10分钟左右没有获得流量,则有两个关键组件需要更新默认配置。

应用回收:

默认情况下,IIS中的应用程序池将空闲超时设置为20分钟。因此,如果没有人在20分钟内访问服务器,则应用程序池将以用户缓存终止,然后在下一个访问者上重新创建。此外,每29小时有一次默认回收,也会清除用户缓存。要解决此问题,请将空闲超时设置为0,并设置应用程序池要回收的特定时间,这将有效地充当每日(或任何频率)进程以有意清除用户缓存。这是一篇截图:

http://weblogs.asp.net/owscott/why-is-the-iis-default-app-pool-recycle-set-to-1740-minutes

PHP FastCGI idleTimeout:

您还需要更改php-cgi的全局FastCGI设置。 IIS管理器 - >服务器 - > FastCGI设置。编辑您正在使用的php-cgi并设置空闲超时(我将其设置为24小时或86400秒)。