2012-02-15 45 views
3

私は最近、中程度のトラフィック(30kユニークビジター/ mo)のWordPressサイトを主に実行するWebサーバー(Centos 5.7、PHP 5.3、1.5Gb RAM)にAPCキャッシュをインストールし、 W3TotalデータベースとオブジェクトのキャッシュにAPCを使用するように設定されているキャッシュ(ページ、ミニディスク使用ディスク)。ワードプレスサイトのAPCキャッシュ断片化

サーバーのAPC情報ページには、一貫して重度の断片化があることが示されています。たとえば、httpdを再起動した後は、11時間後に最大75%の断片化が発生し、数日後には100%で見たことがあります。私は今までにキャッシュメモリの約40%以上を使用してきたことはありませんでしたが、サーバは約400Mbのメモリ、1100Mbの空き領域(free -mで報告されているように -/+バッファ/キャッシュ)で動作します。だから、断片化の原因となっている記憶の不足ではないようです。

私はデフォルトのAPCとW3TCの設定で開始し、次のような変更の様々な組み合わせを試してみました。 - (7200から)1800年に減少

  • apc.ttl
  • 0に設定apc.user_ttl (ユーザ・キャッシュを使用する唯一のものはW3TCであり、それは、それ自身のTTL設定)
  • W3TCタイムアウトがtimthumb
ブロック180 7200へ秒
  • apc.filtersから増加しました

    Google Webmaster Toolsで測定された主観的なパフォーマンスとページの読み込み時間は、どちらの方法でも影響を受けていないようですが、これらの変更は大きな違いはありませんでした。

    私はこれについて心配すべきですか?現在のパフォーマンスは示唆していませんが、サーバーロード/サイトトラフィックが増加する前に、この並べ替えを取得することをお勧めします。それが問題であれば、解決するためにどのような措置を取ることができますか?

    EDIT: - ここに はフルapc.ini設定ファイルです: -

    ; Enable apc extension module 
    extension = apc.so 
    
    ; Options for the APC module version >= 3.1.3 
    ; See http://www.php.net/manual/en/apc.configuration.php 
    
    ; This can be set to 0 to disable APC. 
    apc.enabled=1 
    ; The number of shared memory segments to allocate for the compiler cache. 
    apc.shm_segments=1 
    ; The size of each shared memory segment, with M/G suffixe 
    apc.shm_size=256M 
    ; A "hint" about the number of distinct source files that will be included or 
    ; requested on your web server. Set to zero or omit if you're not sure; 
    apc.num_files_hint=1024 
    ; Just like num_files_hint, a "hint" about the number of distinct user cache 
    ; variables to store. Set to zero or omit if you're not sure; 
    apc.user_entries_hint=4096 
    ; The number of seconds a cache entry is allowed to idle in a slot in case this 
    ; cache entry slot is needed by another entry. 
    apc.ttl=7200 
    ; use the SAPI request start time for TTL 
    apc.use_request_time=1 
    ; The number of seconds a user cache entry is allowed to idle in a slot in case 
    ; this cache entry slot is needed by another entry. 
    apc.user_ttl=0 
    ; The number of seconds that a cache entry may remain on the garbage-collection list. 
    apc.gc_ttl=3600 
    ; On by default, but can be set to off and used in conjunction with positive 
    ; apc.filters so that files are only cached if matched by a positive filter. 
    apc.cache_by_default=1 
    ; A comma-separated list of POSIX extended regular expressions. 
    apc.filters="-.[omitted]/timthumb.php$" 
    ; The mktemp-style file_mask to pass to the mmap module 
    apc.mmap_file_mask=/tmp/apc.XXXXXX 
    ; This file_update_protection setting puts a delay on caching brand new files. 
    apc.file_update_protection=2 
    ; Setting this enables APC for the CLI version of PHP (Mostly for testing and debugging). 
    apc.enable_cli=0 
    ; Prevents large files from being cached 
    apc.max_file_size=1M 
    ; Whether to stat the main script file and the fullpath includes. 
    apc.stat=1 
    ; Vertification with ctime will avoid problems caused by programs such as svn or rsync by making 
    ; sure inodes havn't changed since the last stat. APC will normally only check mtime. 
    apc.stat_ctime=0 
    ; Whether to canonicalize paths in stat=0 mode or fall back to stat behaviour 
    apc.canonicalize=0 
    ; With write_lock enabled, only one process at a time will try to compile an 
    ; uncached script while the other processes will run uncached 
    apc.write_lock=1 
    ; Logs any scripts that were automatically excluded from being cached due to early/late binding issues. 
    apc.report_autofilter=0 
    ; RFC1867 File Upload Progress hook handler 
    apc.rfc1867=0 
    apc.rfc1867_prefix =upload_ 
    apc.rfc1867_name=APC_UPLOAD_PROGRESS 
    apc.rfc1867_freq=0 
    apc.rfc1867_ttl=3600 
    ; Optimize include_once and require_once calls and avoid the expensive system calls used. 
    apc.include_once_override=0 
    apc.lazy_classes=0 
    apc.lazy_functions=0 
    ; Enables APC handling of signals, such as SIGSEGV, that write core files when signaled. 
    ; APC will attempt to unmap the shared memory segment in order to exclude it from the core file 
    apc.coredump_unmap=0 
    ; Records a md5 hash of files. 
    apc.file_md5=0 
    ; not documented 
    apc.preload_path 
    

    UPDATE Iもposted on WP forumsとW3TotalCacheの作者から、この応答得た: -

    その経験を一部のサイトでは予期しないことではありません。私は 次のリリースのキャッシュロジックでAPCのパフォーマンスを向上させるために取り組んでいます。

    だから、W3TotalCacheは断片化の根本的な原因です。

  • 答えて

    5

    APCが使用するセグメントサイズのサイズを大きくしてみてください。 1つのセグメントのみを使用します。また、作成したサブドメインからwp adminインターフェイスにアクセスします。

    Optimize APC Caching

    オペコードキャッシュを必要としない、サーバー上の他のバーチャルホストがある場合は、これらのサイトのためのAPCを無効にすることができます。 vhostレベルで行うには、apc.iniファイルにapc.cache_by_default=0と設定し、wpルートディレクトリの.htaccessファイルにphp_flag apc.cache_by_default Onと入力します。それが断片化の理由であるはずです。

    ファイルの変更によっても断片化が発生する可能性があります。編集したファイルは削除され、新しいファイルがキャッシュに追加されます。まだ完了していない場合は、apc.stat=0も設定する必要があります。これは、ファイルが変更されたかどうか毎回チェックしないことにより、全体のパフォーマンスを向上させます。

    WP管理者をキャッシュしたくない場合は、admin.example.comのようなサブドメインを作成して管理パネルにアクセスできます。このようにすることで、オペコードキャッシングを無効にすることができます。断片化も減少します。

    更新: オブジェクトのキャッシュとdbキャッシングを無効にすると、断片化が軽減されます。オブジェクトキャッシングのためにredisまたはmemcachedを使用し、オペコードキャッシングのみのためのAPCは問題を解決します。

    +0

    私はセグメント(apc.shm_segments = 1)が1つしかなく、256M(apc.shm_size = 256M)です。たぶん私は誤解しているかもしれませんが、そのメモリの約40%以上は使用されていないので、セグメントサイズの拡大はどのように役立ちますか? – rowatt

    +0

    どのバージョンのAPCを使用していますか? –

    +0

    3.1.9(およびPHP 5.3.10) – rowatt