2014-01-20 93 views
1

我已經WINCACHE在IIS7運行在我的php.iniWINCACHE而TTL設置爲0

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

我用ucache存儲一些重磅數據如下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個mintues?)的緩存完全清除。這是我設置了ttl =「0」的時候。根據PHP網站:

wincache.ttlmax整數: 定義不使用緩存條目的最大生存時間(以秒爲單位)。將其設置爲0將禁用緩存清除程序,以便在IIS輔助進程的生命週期內永遠不會從緩存中刪除緩存的條目。

我找不到任何特別的IIS日誌記錄,我也不知道如何調試這個。任何人都有一些答案或提示?

回答

1

我沒有解決方案,但是從我讀過的內容來看,IIS上的FastCGI會在一段空閒時間後終止實例,並且usercache會隨之運行。可以將IIS配置爲解決方法,但我敢打賭存在更好的解決方案。

+0

對不起,遲到的反應,但你是對的。我只是不明白爲什麼Wincache對於緩存是如此易變 – douweegbertje

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:

您還需要改變全球FastCGI設置爲你的php-cgi的。 IIS管理器 - >服務器 - > FastCGI設置。編輯你正在使用的php-cgi,並設置空閒超時(我把我的設置爲24小時或86400s)。