2011-11-15 6 views
3

私は大きなWordPressのサイトを維持していますが、無関係な問題のトラブルシューティングを試みています。コードにtrace_statementを追加するだけです。これは、error_log()の呼び出し以上のものです。簡単に私のサーバー設定は、nfs経由でWebサイトのドキュメントルートを共有するファイルサーバーです。 nginx + apc + php/fpmを実行している2つのWebサーバがあります。私はファイルサーバ上で直接phpファイルを編集しています。ウェブサーバからファイルを見ると、私は自分の変更を見ることができますが、エラーログの末尾に変更が反映されていないことがわかります。私はまったく変更を加えなかったかのように古いトレースステートメントを見続けています。コード変更がすぐに反映されないのはなぜですか?

私の理論は、コードがapc(duh)またはクライアント側のnfsキャッシュにキャッシュされているということです(viでの編集を見ることはできません)。私は、apc_clear_cache()を実行するスクリプトを使ってapcキャッシュをフラッシュすることでこれを軽減しようとしています。さらに、私は何かが古いキャッシュされたPHPコードをフラッシュすることを望んで、php-fpmと同様、nginxを再起動しました。これらの方法は機能していません。ログにコードの変更が反映されるまでには、1時間以上待つ必要があります。

私がトラブルシューティングしているウェブサイトはかなり高いトラフィックであるため、nfs共有を再マウントすることは本当に私にとってはオプションではありません。私の前提は、apc opcodeのキャッシュは実際にはクリアされていないが、私はapc.phpで統計を見ていて、私はフラッシュスクリプトを実行した後にキャッシュが再構築されているように見える。私は数日間これをしてきたし、簡単な問題のトラブルシューティングは大きな頭痛に変わった。誰かが他のもののアイデアを見たり、自分のコードの変更をより即座にすることができますか?

+0

トラフィックの多いプロダクションサーバーで直接ファイルを編集しているのはなぜですか? – GolezTrol

+0

トラブルシューティングの問題はサンドボックス環境では発生しないため、ライブサーバーでのみ発生します。 – sphoid

+0

したがって、apcキャッシュをクリアして、両方のWebサーバーでnginxを再起動しています...あなたのPHPにいくつかの目に見えないHTMLを挿入することで、検索範囲を絞り込むことができます。例えば'<! - newcode - >'フロントエンドでソースを見るときに表示されるなら、あなたの新しいコードが実行されていることを知っているので、APCとnginxを除外することができます。エラーログへの書き込みはバッファリングされているだけなので、ログを書き留める際に古いエントリが表示されることがありますか? –

答えて

0

私は、この問題のために十分な原因を発見したことはありませんが、我々は、式からNFSを削除することを選んだと私たちの問題は、援助皆のためaway.Thanksを行ってきました。

0

いくつかの考え:

  1. あなたが微調整している場合は一時的にtrueにapc.statを設定すると便利かもしれません。これはパフォーマンス上の小さなペナルティを意味しますが、各要求の前に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

関連する問題