速度:带APC和MEMCACH的洋红色
-
16-10-2019 - |
题
我们研究了许多论坛,不知道以下内容的答案。我们都有 APC
和 Memcache
安装在我们的服务器上。我们不确定正确和最佳配置是什么。
我的问题
什么是/是使用Memcache + APC同时运行Magento的最佳设置? (或者这根本不聪明)
背景调查
在这里,建议将memcache和APC作为快速和缓慢的缓存(但没有磁盘)。听起来只有在您有足够的RAM(确定)时才有效
本文是关于memcache的 或者 APC-我们都有
它在这里指出,只有当您也定义了缓慢的后端,Memcache才真正起作用
我认为这篇文章也是如此
这是我的ISP解决方案local.xml
<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还具有可扩展的文件缓存,以使其更复杂)
解决方案
您需要了解这两种产品之间的明确区别,以了解如何使用它们。
- APC都是 OPCODE缓存 和 快速后端
- memcache只是一个 快速后端
使用APC作为OpCode缓存
只需在服务器上安装模块
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的OpCode缓存部分处于活动状态。
在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)
然后在服务器上安装模因。对于RH/CentOS,请调整URL以适合您的发行版和CPU架构。
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 Cache标签(用于独立冲洗缓存数据)。结果,您要么需要指定 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>
这将破坏/禁用第二级缓存(并防止标签存储),但仍允许进行Memcache的性能。
使用哪个
如果是单个服务器部署 - 只要将APC用于所有事物,就不会受到伤害。
如果是分布式设置 - 然后,您需要将memcache用作快速后端(以便所有计算机都可以访问公共商店)。
更令人担忧的是,如果您的托管提供商无法告诉您正确的设置要使用,那么您肯定会有错误的主机。
归因: sonassi.com, php.net, repoforge.org
其他提示
我完全同意以前的答案,但这是完成它的简短精确度:是的,APC可以用作缓存存储引擎和PHP字节代码优化器。但是需要澄清两点:
作为快速后端,APC使用的配置指令通过APC.USER_%指令来了解其必须保存数据必须保存的数据。另一个仅涉及字节代码缓存(ex apc.ttl:OpCode缓存的到期持续时间,apc.user_ttl:由Magento缓存中存储的数据的到期持续时间)。
作为快速后端,APC的行为与MEMCACH的行为完全相同:它不管理缓存标签,并且对于Magento,它需要配置的慢速后端(或默认情况下使用缓慢的后端文件)。
根据我的经验,在流量庞大的网站上,如果您仅将APC用作字节代码优化器,则在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或以快速后端的方式使用MEMCACH,则很难为您提供有关所需内存的一些提示:这实际上取决于您实例上应用的缓存策略。
目前,您的缓存配置工作如下:
- 每个内容都存储在备件和文件中
- 快速后端总是在后端速度下要求
- 如果快速后端什么都没发现,Magento在缓慢的后端寻找
为什么这两个级别管理?备忘录和其他快速后端是内存存储。因此,这意味着数据可能会损坏或消失。
如何提高此配置性能?
禁用第二次写作可能是最有效的选择之一。这在您提到的第四篇文章中进行了解释。但是,如果没有修改,您将无法使用slow_backend_store_data源代码。在您的上下文中,我不建议出于以下原因进行自定义:您存储在缓存中的数据将永远不会受到控制。您将在内存中存储数据,将赢得性能,但也许会发送给您的Vistors的内容无效。因此,您需要找到一个解决方案,以确保您拥有内存频率(以获得更好的性能),写入控制以及禁用slow_backend_store_data缓存的能力。您可以通过:
用redis替换备用服务器 (redis可以像文件系统完成一样控制读写),并且 继续使用APC 作为字节代码优化器
*确保您能够使用slow_backend_store_data选项* 通过自定义源代码,或者通过切换到数据库慢速后端(是的,它增加了数据库服务器的负载,但是如果您的缓存策略定义得很好,则不应该是问题)
*停用slow_backend_store_data选项*: :在这种配置中,不再需要,您已经读取和写入Redis完成的控件。
另外,我们已经发现,当将APC与Magento一起使用时(用于OpCode Caching-我们使用Redis进行常规的Magento页面和Block Caching),因此必须确保统计设置在生产中为0(但1 in发展):
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也得到了支持。
没有任何比较...现在是单击点击器点击单击
http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee
此外,您可以考虑添加redis会话扩展名,以还将会话添加到Redis Memory Server ...
祝你好运!
从此local.xml文件中,Magento将拾取最后一个条目并使用memcache。我认为APC和Memcache如何与Magento一起使用之间存在混乱。
首先,APC有2种用途:
- opCode缓存 - 将您的PHP文件编译为OpCode,使脚本执行速度大约25%
- 密钥/值存储 - Magento可以用作缓存系统。
另一方面,memcache只是一个密钥/值存储。 Memcache的最大优点是它可以在客户端服务器模式下工作,因此多个前端服务器可以使用相同的缓存,如果您有多个服务器可以使用同一网站,则必须使用。
最常见的设置是安装APC以获取OpCode缓存(因此您可以获得约25%的脚本执行〜25%),并将Memcache用作缓存服务器。我还将APC用作缓存系统,尽管从理论上讲,它应该比Memcache快一点,但您无法分辨出区别。