2011-11-15 50 views
3

我正在維護一個大的WordPress站點,我試圖通過在代碼中添加跟蹤語句來解決一個無關的問題,這些語句只不過是對error_log()的調用。簡而言之,我的服務器設置是一個文件服務器,它通過nfs共享網站的文檔根目錄。有2個網絡服務器運行nginx + apc + php/fpm。我直接在文件服務器上編輯php文件,當我從Web服務器查看文件時,我可以看到我的更改,但是當我尾巴錯誤日誌時,我可以觀察到我的更改不會立即反映出來。我繼續看到舊的跟蹤陳述,就好像我根本沒有做出改變。爲什麼我的代碼更改沒有立即反映?

我的運行理論是代碼被緩存在apc(duh)或客戶端nfs緩存中(不太可能,因爲我可以看到vi的編輯)。我嘗試通過使用運行apc_clear_cache()的腳本來刷新apc緩存來緩解這種情況。此外,我重新啓動了nginx以及php-fpm,希望能夠刷新舊的緩存php代碼。這些方法都沒有工作,我必須等待一個小時或更長時間,然後才能看到我的代碼更改反映在日誌中。

我正在排除故障的網站流量相當高,因此重新安裝nfs共享對我來說不是一個真正的選擇。我的假設是apc操作碼緩存實際上並未清除,但我一直在用apc.php觀察統計信息,並且看到在我運行我的flush腳本後,重建的緩存看起來像什麼。我已經在這裏待了幾天,解決一個簡單的問題變成了一個非常頭疼的問題。任何人都可以提供其他東西的任何想法來看看或嘗試使我的代碼更改更直接?

+0

爲什麼直接在高流量生產服務器上編輯文件? – GolezTrol

+0

因爲我正在排除故障的問題不在沙盒環境中發生,只能在實時服務器上進行。 – sphoid

+0

因此,您正在清除apc緩存並在兩個Web服務器上重新啓動nginx ...您可以通過在PHP中插入一些不可見的HTML來縮小搜索範圍。例如'<! - newcode - >'如果在前端查看源代碼時顯示,那麼您知道您的新代碼正在運行,您可以排除APC和nginx。難道是寫入錯誤日誌只是被緩衝,所以當你記錄日誌時你會看到舊的條目? –

回答

0

我從來沒有發現這個問題一個滿意的原因,但我們選擇從公式中刪除NFS和我們的問題已經爲援助大家away.Thanks。

0

的幾點思考:

  1. 暫時設置apc.stat爲true可能是,如果你調整有用;這意味着性能上的一個小小的損失,但會迫使APC在每次請求前重新檢查opcache。

  2. 這是我的鳥槍法刷新APC緩存(迫使每個單獨的文件無效)。

  3. FPM總是一個共享緩存(手冊似乎這樣說);還是有更多的緩存? (不知道!我對FPM不是很熟悉)。

 
    $info = apc_cache_info(); 
    $files = $info['cache_list']; 
    $prefix = "/"; 
    if (isset($_GET['PREFIX'])) 
    { 
     $prefix = $_GET['PREFIX']; 
    } 
    $user = apc_cache_info("user"); 
    $cachestore = array(); 
    // save the user cache to an array 
    foreach ($user['cache_list'] as $info) 
    { 
     $cachestore[$info['info']] = apc_fetch($info['info']); 
    } 
    apc_clear_cache(); 
    apc_clear_cache('user'); 
    // Recache all the files that were in the opcache before.. 
    foreach ($files as $file) 
    { 
     if (strpos($file['filename'], $prefix) === 0) 
     { 
      print $file['filename'] . " : "; 
      print apc_compile_file($file['filename']) ? "SUCCESS\n" : "FAILE    D\n"; 
     } 
    } 

    foreach ($cachestore as $key => $value) 
    { 
     apc_store($key,$value); 
    } 
+0

1.這已設置爲true。說實話,我剛剛得知這一點,並計劃儘快解決這個問題。 – sphoid

+0

2. $文件是如何設置的? – sphoid

+0

3.是fpm是唯一一個共享緩存 – sphoid

相關問題