我在我的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日志记录中找不到任何特别的东西,我也不知道如何调试这个。有人得到了一些答案或提示吗?
答案 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秒)。