速度:APCとMemcachedの両方を備えたMagento
-
16-10-2019 - |
質問
私たちは多くのフォーラムを研究しており、以下に対する答えを知りません。両方があります APC
と Memcache
サーバーにインストールされています。正しい構成と最適な構成が何であるかはわかりません。
私の質問
Memcache + APCの両方を同時に使用してMagentoを実行するのに最適な設定は何ですか? (またはこれはまったく賢くありません)
背景調査
ここでは、MemcacheとAPCは、高速および遅いキャッシュ(ただしディスクなし)としてお勧めします。このように聞こえますが、あなたが十分なRAMを持っているときにのみ機能します(そしてそれについて確信してください)
そして、この記事はMemcacheに関するものです また APC-そして両方があります
そして、ここでは、memcacheが遅いバックエンドを定義している場合にのみ実際に機能すると述べています
そして、この記事は同じことを言っていると思います
これは、local.xmlに対する私のISPのソリューションです
<cache>
<backend>apc</backend>
<prefix>sitenamehere__</prefix>
</cache>
<cache>
<backend>memcached</backend>
<memcached>
<servers>
<server>
<host><![CDATA[127.0.0.1]]></host>
<port><![CDATA[11211]]></port>
<persistent><![CDATA[1]]></persistent>
</server>
</servers>
<compression><![CDATA[0]]></compression>
<cache_dir><![CDATA[]]></cache_dir>
<hashed_directory_level><![CDATA[]]></hashed_directory_level>
<hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
<file_name_prefix><![CDATA[]]></file_name_prefix>
</memcached>
</cache>
状況
共有ホスティングBrim FPCインストール: http://ecommerce.brimllc.com/full-page-cache-magento.html(このFPCにはスケーラブルなファイルキャッシュもあり、より複雑になります)
解決
これら2つの製品の使用方法を理解するには、これら2つの製品の明確な区別を理解する必要があります。
- APCは両方です オペコードキャッシュ と 高速バックエンド
- memcacheはただのものです 高速バックエンド
APCをオペコードキャッシュとして使用します
サーバーにモジュールをインストールするだけです
pecl install apc
そして、あなたの中でそれを有効にします php.ini
echo "extension=apc.so" >> /usr/lib/local/php.ini (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini (Debian)
次に、有効にして微調整します ランタイム構成 適しています。
APC.Enabled
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...
次に、PHP/Apacheを再起動します
/etc/init.d/httpd restart (RedHat/Centos)
/etc/init.d/apache2 restart (Debian)
その後、他に何もすることはありません。 APCが迅速に有効になっていることを確認してください phpinfo()
- しかし、それ以外の時点で、この時点で、APCのオペコードキャッシュ部分がアクティブです。
Magentoの側で構成する必要はありません。
APCを高速バックエンドとして使用します
以下を追加する必要があります ./app/etc/local.xml
<global>
...
<cache>
<backend>apc</backend>
<prefix>mystore_</prefix>
</cache>
...
</global>
次に、既存のストアキャッシュを洗い流します。それが機能していることを確認するには、フロントエンドと ./var/cache
ディレクトリは空のままです。
Memcacheを高速バックエンドとして使用します
MemcacheをPHP拡張機能としてインストールし、サーバーにそれぞれのMemcacheデーモン(Memcached)をインストールする必要があります。
pecl install memcache
そして、あなたのphp.iniでそれを有効にします
echo "extension=memcache.so" >> /usr/lib/local/php.ini (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini (Debian)
/etc/init.d/httpd restart (RedHat/Centos)
/etc/init.d/apache2 restart (Debian)
次に、サーバーにMemcachedをインストールします。 RH/CENTOSについては、リリースバージョンとCPUアーキテクチャに合わせてURLを調整します。
rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached
apt-get install memcached (Debian)
次に、Magentoを修正してMemcacheを高速バックエンドとして使用し、ソケットパスをTCP/IP接続に変更します。
<cache>
<slow_backend>database</slow_backend>
<fast_backend>memcached</fast_backend>
<fast_backend_options>
<servers>
<server>
<host>unix:///tmp/memcached.sock</host>
<port>0</port>
<persistent>0</persistent>
</server>
</servers>
</fast_backend_options>
<backend>memcached</backend>
<memcached>
<servers>
<server>
<host>unix:///tmp/memcached.sock</host>
<port>0</port>
<persistent>0</persistent>
</server>
</servers>
</cache>
memcacheとタグの警告 - それは何を保管していますか
Memcacheは、単一のレベルのキー価値関係をサポートするため、Magentoキャッシュタグを保存することはできません(キャッシュデータを独立してフラッシュするために使用されます)。その結果、あなたはを指定する必要があります slow_backend
キャッシュタグの関係を維持するか、それを定義しないでください。
あなたが定義する場合 slow_backend
, 、キャッシュタグが非常に大きくなるリスクを実行して、パフォーマンスが無効になります。また、各サーバーが独自のキャッシュタグを維持している場合、複数のサーバー間でスケーリングできない固有の問題もあります。
したがって、memcacheを使用する場合、 より良い アプローチ(独立してキャッシュを洗うことはできない警告がある)は、 slow_backend
.
その場合、削除をお勧めします <slow_backend>database</slow_backend>
に置き換えます:
<slow_backend>Memcached</slow_backend>
<slow_backend_options>
<servers>
<server>
<host>unix:///tmp/memcached.sock</host>
<port>0</port>
<persistent>0</persistent>
</server>
</servers>
</slow_backend_options>
これにより、2番目のレベルのキャッシュが破損/無効になります(タグストレージを防止します)が、それでもMemcacheのパフォーマンスが可能になります。
使用するもの
単一のサーバー展開の場合 - すべてにAPCを使用するだけで害はありません。
分散セットアップの場合 - 次に、Memcacheを高速バックエンドとして使用する必要があります(すべてのマシンが共通ストアにアクセスできるように)。
さらに懸念されるのは、ホスティングプロバイダーが使用する正しいセットアップを教えてくれない場合、あなたは確かに間違ったホストと一緒にいるということです。
帰属: Sonassi.com, php.net, repoforge.org
他のヒント
私は以前の回答に非常に同意しますが、ここでそれを完了するための短い精度があります:はい、APCはキャッシュストレージエンジンとPHPバイトコードオプティマイザーの両方として使用できます。しかし、2つのポイントを明確にする必要があります。
高速バックエンドとして、APCがデータを保存する方法を理解するために使用される構成ディレクティブは、APC.USER_%ディレクティブを介して管理されます。もう1つは、バイトコードキャッシュのみに関係しています(ex apc.ttl:opcodeキャッシュの有効期限、apc.user_ttl:Magentoによってキャッシュされたデータの有効期限)。
また、高速バックエンドとして、APCはMemcachedとまったく同じ動作を持っています。キャッシュタグを管理しません。Magentoの場合、構成されたスローバックエンド(またはデフォルトでは遅いバックエンドファイルを使用)が必要です。
私の経験から、膨大なトラフィックを持つWebサイトで、APCをBYTEコードオプティマイザーのみとして使用する場合、APC.SHM_SIZE構成値で96〜256moが必要です。また、APC.NUM_FILES_HINTを1000から15000に増やします。デフォルトでは、APCキャッシュバイトコードキャッシュは1000ファイルのみであり、Magentoにはデフォルトで約20,000のPHPおよびPHTMLファイルが含まれています(find . -type f -name "*.php" -o -name "*.phtml" | wc -l
)。ソースコードでこの値をカスタマイズしてください。
APCを使用するか、速いバックエンドとしてmemcachedを使用する場合、必要なメモリに関するヒントを提供することは困難です。インスタンスに適用されるキャッシュポリシーに依存します。
今のところ、キャッシュ構成は次のように機能します:
- すべてのコンテンツは、memcachedとfileの両方に保存されます
- 高速バックエンドは、バックエンドが遅くなる前に常に要求されます
- 高速バックエンドで何も見つからない場合、Magentoはスローバックエンドで探します
なぜこれら2つのレベルが管理するのですか? Memcachedおよびその他の高速バックエンドはメモリストレージです。したがって、データが破損したり、消えてしまったことを意味します。
この構成パフォーマンスをどのように増やすことができますか?
2番目のライティングを無効にすることは、おそらく最も効率的なオプションの1つです。これは、あなたが言及した4番目の記事で説明されています。ただし、slow_backend_store_dataソースコードを変更せずに使用することはできません。あなたの文脈では、次の理由でこのカスタマイズを行うことをお勧めしません。キャッシュに保存されているデータは制御されません。データをメモリに保存し、パフォーマンスを獲得しますが、おそらくVistorsに無効なコンテンツを送信します。そのため、メモリアクセス(パフォーマンスを向上させるため)、コントロールを書き込み、slow_backend_store_dataキャッシングを無効にする機能を確保するソリューションを見つける必要があります。このコンテキストに到達できます。
memcachedサーバーをRedisのサーバーで交換します (Redisは、ファイルシステムによって行われるように読み書きを制御できます)、および 引き続きAPCを使用します バイトコードオプティマイザーとして
*slow_backend_store_dataオプションを使用できるようにしてください* ソースコードをカスタマイズするか、データベースのスローバックエンドに切り替えることによって(はい、データベースサーバーのロードが増加しますが、キャッシュポリシーが十分に定義されている場合は、問題にはなりません)
*slow_backend_store_dataオプションを非アクティブ化*: :この構成では、それはもう必須ではありません。Redisによって行われた読み取りと書き込みの制御があります。
これへの追加のメモとして、MagentoでAPCを使用する場合(OpCode Cachingには、従来のMagentoページとブロックキャッシュにRedisを使用します)、統計設定が生産で0であることを確認することが重要であることがわかりました(しかし、1インチで1インチ発達):
apc.stat = 0
APC.STAT設定は、各リクエストのスクリプトを確認して変更されたかどうかを判断するかどうかを判断するために使用されます(http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat)そして、生産環境でこれを0に設定すると、APCが各リクエストでこのチェックを行わないというパフォーマンスの利点がもたらされます。
APC.STATが0に設定されると、ファイルの変更をピックアップするためにWebサーバープロセスを再起動する必要がある可能性が高いことに注意してください(つまり、展開後)。
バックエンドを大幅にスピードアップするために私たちがした最善のことは Redisをキャッシュハンドラーとしてインストールします. 。現在、Magento 1.8以降のCoreでサポートされています。
何も比較しません...クリックしますclickerdyクリック
http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee
さらに、Redisセッション拡張機能を追加して、Redisメモリサーバーにセッションを追加することを検討できます...
幸運を!
このlocal.xmlファイルから、Magentoは最後のエントリをピックアップしてMemcacheを使用します。 APCとMemcacheがMagentoでどのように機能するかには混乱があると思います。
まず、APCには2つの用途があります。
- opcodeキャッシュ - PHPファイルをOPCODEにコンパイルし、スクリプトの実行を約25%高速にします
- キー/バリューストレージ - Magentoはキャッシュシステムとして使用できます。
一方、Memcacheは単なるキー/バリューストアです。 Memcacheの大きな利点は、クライアントサーバーモードで動作できることです。そのため、複数のフロントエンドサーバーが同じキャッシュを使用できることです。これは、同じWebサイトを提供する複数のサーバーがある場合は必須です。
最も一般的なセットアップは、APCをインストールしてOpCodeキャッシュを取得し(スクリプトの実行を25%高速に取得します)、Memcacheをキャッシュサーバーとして使用することです。また、APCをキャッシュシステムとして使用しましたが、理論的にはMemcacheよりも少し速いはずですが、違いを見分けることはできません。