web-dev-qa-db-ja.com

APC-> APCu / OPCache、パフォーマンスが悪い

を持っています m3.xlargeに更新したEC2インスタンスPHP 5.5.11今日。

この更新により、php55-pecl-apc with php55-pecl-apcu

読んで実験した後、私の理解では、APCで戻すことができるキー値ストアを除き、OPCacheAPCuに置き換えられました。

設定を合理的に見えるように調整した後、ログイン中にWordpressを使用するとひどく遅くなり、少なくとも300-900ms悪化します(フロントエンドはニスを介してキャッシュされ、完璧に動作します...ただし、管理者を使用している場合、意図的にキャッシュされず、sinのように遅くなります)。

アップグレード時に、各ステップの小さなサンプルサイズで一連のベンチマークを行いました。私が進むにつれて悪化しました。

  • APC(アップグレード前)-->
  • OPCache + APCuなし-->
  • OPCache + APCu + WP APCuのプラグイン

現在、私はただOPCacheを使用していますが、APCuは使用していません。

  1. どうすれば同じパフォーマンスを達成できますか?私は管理インターフェースが大好きで、それがどれほど速いかが気に入りました。正直なところ、これがどのように改善されているかはわかりませんが、本当に気のめいるようです...私が気付いていないスーパーライブラリがない限りです。それは確かに私が持っているものではありません、または多分それはうまく構成されていません。
  2. #1の答えが「ボールのように設定した」と仮定した場合、これを見て、これが妥当かどうかを確認してください。

私のセットアップでは、最新のワードプレス、いくつかの大きなプラグインを使用していますが、それらは重要なので削除できません。幸いなことに、ニスはほとんどの作業を引き受けます。 Webサイトのルートに4つのコア、16GBのメモリ、1万個以下のファイルがあります。また、本物の筋金入りのアプリやワードプレス以外のものはありません。それはかなりバニラのセットアップです。私はそれが役立つかもしれないもののためだと思います。

構成:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.revalidate_path=0
opcache.save_comments=0
opcache.load_comments=0
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.optimization_level=0xffffffff
opcache.inherited_hack=1
opcache.dups_fix=0
opcache.blacklist_filename=/etc/php-5.5.d/opcache*.blacklist
opcache.max_file_size=2M
opcache.consistency_checks=1
opcache.force_restart_timeout=180
opcache.error_log=/var/log/php-fpm/5.5/opcache.log
opcache.log_verbosity_level=1
opcache.preferred_memory_model=
opcache.protect_memory=0
28
Tallboy

現時点では、変更の要求ごとにすべてのファイルをチェックしていますが、これはおそらく本番システムで必要なものではありません。

私は通常、それを無効にします(変更を行った後にWebサーバーを再起動することを忘れないでください):

opcache.validate_timestamps=0

または、周波数を0以外に設定して、有効にしておくこともできます。

opcache.validate_timestamps=1  
opcache.revalidate_freq=300

理論的には、5分ごとに変更を確認するだけです。

16
knrdk

あなたも持っています

opcache.consistency_checks=1

ドキュメントによると、パフォーマンスが低下します。オフにします。

opcache.consistency_checks integer

ゼロ以外の場合、OPcacheはN個の要求ごとにキャッシュチェックサムを検証します。Nはこの構成ディレクティブの値です。パフォーマンスを低下させるため、デバッグ時にのみ有効にしてください。

7
awhig

OPCacheをPHPに統合することを担当したRFCから:

APCは、古い無効化されたスクリプトのメモリを再利用できます。 APCはメモリマネージャを使用し、使用されなくなったスクリプトに関連付けられているメモリを再利用できます。 Optimizer +の動作は異なり、そのようなメモリを「ダーティ」としてマークしますが、実際にそれを回収することはありません。ダーティパーセンテージが設定可能なしきい値を超えると、Optimizer +は自動的に再起動します。この動作には、安定性の利点と欠点の両方があることに注意してください。

私の推測では、オペコードキャッシュの再起動をトリガーするしきい値に達しています。

リファレンス: https://wiki.php.net/rfc/optimizerplus#advantages_of_apc_over_optimizer

5
saboya