問題タブ [opcache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - ファイルサイズの変化が小さい場合に OPcache が更新されない
私の開発用 VM では、変更が小さい場合、OPcache はファイルのキャッシュを無効にしません。変更間の時間は考慮されていないようです。OPcacheに注意を向けさせるために、多くの場合、偽のコメント(最大80文字)を追加する必要があります。OPcache を無効にすると、問題はなくなります。
開発 VM で OPcache を有効にしたままにしておきたいと思っています。これにより、処理がかなり高速化され、本番環境との一貫性が保たれます。わずかな文字変更でも OPcache がファイルを無効にするためにできることはありますか?
PHP 5.5.14
アパッチ2.4.9
Ubuntu 14.04
OPcache 設定:
capistrano - Opcache の実行時に新しい PHP コードをデプロイする
Opcache の実行中に Capistrano を介して新しい PHP コードをデプロイしようとしています。
Capistrano は、デプロイするたびに新しいデプロイ ディレクトリを作成し、Web サーバーが新しいディレクトリを指すようにシンボリック リンクを調整します。Opcache はファイルの実際のパスによってキャッシュされるため、サイトの新しくデプロイされたバージョンは古いバージョンとは完全に別個にキャッシュされることを意味します。
私たちが直面している問題は、Opcache がメモリを使い果たすことです。これは、新しいデプロイのたびに完全なコード ベースがキャッシュされ、古いコードが削除されないためです。を呼び出すこともできますopcache_reset()
が、キャッシュがリセットされると、キャッシュが暴走するときに 500 エラーが一時的に発生します。(キャッシュをウォームアップせずに新しいデプロイを開始しようとすると、同じエラーが発生します。)
これを処理するより良い方法はありますか?opcache_reset()
ライブサイトでの呼び出しを回避できるように、メモリがなくなるまで (またはファイルが多すぎるために空になるまで) opcache をいっぱいにせずに新しいコードを起動する方法はありますか? PHP-FPMがPHPリクエストを処理するWebサーバーとしてNginxを使用しています(またはとにかく移行しようとしています)。
caching - OpCache Zend のフラッシュ/再起動の理解
APC から切り替えた OpCache Zend を使用しています。OPCacheが最終レベルに達したときにメモリをフラッシュする理由を理解することができました。Oom の再起動または Hash の再起動が発生するまで、ロジック メモリがいっぱいになり、OpCache がそれを保持する必要があります。右 ?
約 65 のドメイン (Wordpress、Joomla、Magento、Pure PHP) があります。
私のサーバーの仕様は次のとおりです。
Intel Xeon X3440 Quad-Core
Memory 16GB
x2 1500 GB SATA II-HDD 7.200 rpm
CentOS 5 - Plesk 10 - RAID 1
Zend OPcache の私の設定は次のとおりです。
現時点では、最大で 7963 個の高速化されたファイルがありますが、さらに多くのファイルを試しました。奇妙なことに、フラッシュが発生した場合、OPCache の再起動に関する情報はありません。
php - git push 後にのみ opcache を再検証する
OPcacheでPHPを使用しています。私はマスターに git-push して Web サイトを本番環境にデプロイするだけです (実際には、単体テストの直後ですが、気にしないでください)。ファイルではphp.ini
、OPcache の設定は「時間」と「頻度」に関するものです。しかし、サーバーで git pull を実行した後にキャッシュをリセットしたいだけです。
opcache_reset
したがって、本番サーバーでgit-pullの後に呼び出して(キャッシュをリセットしない)に設定opcache.validate_timestamps
するだけでよいと思います0
私はその方法について何も読んでいなかったので、疑問に思っています。それが良い習慣であるかどうかはわかりません。私は何か見落としてますか?リスクはありますか、それとも大丈夫ですか?
どうもありがとう!
PS:私はPHPフレームワークとコンポーザを使用しています(composer install
git-pullの直後に実行されています)
php - Symfony2: OpCache で「クラスローダー」をキャッシュする
PHP
OPCacheと呼ばれる新しいコード キャッシュ モジュールを備えています。Symfony2は、( APCに基づく) または( XCacheに基づく) を使用して、クラスからそれを含むファイルへのマッピングをキャッシュすることをお勧めします。 私のサーバー (Apache 2.4 with PHP 5.6) は.ApcClassLoader
XcacheClassLoader
OpCache
- の代替「キャッシュマッピング」はあり
OpCache
ますか? 私はまだ見つけていない。 APC
と を一緒に使用OpCache
できますか (ApcClassLoader を使用できますか)? ないと思います。
php - PHP 5.5 OPCache を有効にする
OPCacheを推奨どおりに構成した後、機能しません。
では、OPCache をデバッグして問題の場所を確認する方法は?
それとも私は何かが欠けていますか?
私の設定:
php.ini
php -v
そしてコードで
php - Yii 1.1.12 : OpCache の設定方法 : PHP を 5.3 から 5.5 にアップグレードしました
私は Yii 1.1.12 を使用しており、最近 PHP を 5.3 から 5.5 にアップグレードしましたが、OpCache が PHP5.5 の一部になったため、APC が使用されなくなっていることがわかりました。Yii の main.config ファイルには、次のエントリがあります。
2 つの質問:
- 上記のエントリを何に変更すれば、Yii がそれをキャッシュとして取得できるかわかりません。私は自分のコードで以下を広範囲に使用しています
Yii::app()->cache->set('キャッシュするデータ', $CACHE_VARIABLES); $get_var=Yii::app()->cache->get($CACHE_VARIABLES);
- 私は正しい軌道に乗っていますか、それとも何か他のものを見逃していますか?
PhpInfo の出力は、次の Zend Opcache 変数を示しています (ローカル値とマスター値は、各変数の前に示されています。
Zend OPcache
ありがとう。
php - PHP 5.5.5 は OPcache から Phar ファイルをロードできますか?
使用している PHP のバージョンは5.5.5で、次のページで説明されているように、このバージョンの PHP がプリコンパイル済みスクリプト バイトコードを共有メモリに格納できることはわかっています。
また、次のページに記載されているように、OPcache がファイルをコンパイルできることも知っています: http://php.net/manual/en/function.opcache-compile-file.php
これが Phar ファイルで機能する場合、これは素晴らしいことです。しかし、PHP が私の Phar ファイルをバイトコードから共有メモリにロードしているかどうかはわかりません。opcache_is_script_cached 関数をテストに使用できません。これは PHP 5.5.5 では使用できないためです。関数は PHP 5.6 以降でのみ使用できます。
誰かがこれが機能するかどうかを明確にするか、少なくとも私が見つける方法を説明してもらえますか?
php - PHP 5.6 function_exists OPCache での奇妙な動作
PHP 5.6で、php 関数function_exists()の奇妙な動作に出くわしました。問題は、関数名パラメーターを文字列として直接提供すると、結果が変数として提供された場合とは異なることです。コードは次のとおりです。
結果は次のとおりです。
どちらの場合もfalseになるはずです。
さらに深く掘り下げると、OPCacheと関係があることがわかりました。OPCache が無効になっている場合、結果は問題ありません。両方の呼び出しで false が返されます。ただし、OPCache を有効にすると、最初の実行では問題ありませんが、2 回目の実行では (つまり、キャッシュされた結果が提供されると)、結果が正しくありません。
関数posix_getpwuidは、 PHP 構成のdisable_functionsで無効になっています。存在しない関数名でテストすると、正しい結果が得られます。
PHP 5.5.21 でテストすると、結果は問題ありません (OPCache の有無にかかわらず)。
PHP 5.5 と 5.6 の両方で Zend OPcache v7.0.4-dev を使用します。
PHP 開発者にバグを送信することを考えています。何かを見逃していないことを確認したかっただけです。
ありがとう。
編集: 新しくコンパイルされた PHP 5.6.6 および 5.6.7 でもテストされています。OSはCentOS 6.6にフルアップデート。結果は、5.6.6 または 5.6.7 で同じです。
ビルド オプションなしでビルドされた PHP:
本当にシンプルなphp.iniで
テスト スクリプト:
そして結果 - 最初の実行と正しい結果:
2 回目の実行 - OPCache によって提供され、結果が悪い:
(理由はよくわかりませんが、php
onlyで実行するとOPCacheが起動しなかったので、使用しましたphp-cgi
)