速度:带有APC和Memcached的Magento


17

我们研究了许多论坛,但不知道以下答案。我们有APCMemcache安装我们的服务器上。我们不确定什么是正确的最佳配置。

我的问题

同时使用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还具有可扩展的文件缓存,使其更加复杂)


@sonassi,为什么不代替memcached-tag?code.google.com/p/memcached-tag

Answers:


26

您需要了解这两种产品之间的明显区别,才能了解如何使用它们。

  • 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)

在那之后,无事可做。快速确认启用phpinfo()APC-否则,此时,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)

然后在服务器上安装Memcached。对于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缓存标签(用于独立刷新缓存数据)。结果,您需要指定一个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.comphp.netrepoforge.org


当我尝试使用此技巧禁用slow_backend_cache时,我进入slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceMage 1.7.0.2
Aaron Pollock

6

我完全同意先前的回答,但是要完成此任务的精度很低:是的,apc既可以用作缓存存储引擎,也可以用作PHP字节码优化器。但是有两点需要澄清:

  • 作为快速后端,APC用于了解其如何保存数据的配置指令通过apc.user_%指令进行管理。其他仅涉及字节码缓存(例如apc.ttl:操作码缓存的有效期限,apc.user_ttl:Magento缓存的数据的有效期限)。

  • 作为快速后端,APC的行为与memcached完全相同:它不管理缓存标签,对于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或memcached用作快速后端,则很难为您提供有关所需内存的提示:它实际上取决于您实例上应用的缓存策略。

目前,您的缓存配置如下所示:

  • 每个内容都存储在memcached和文件中
  • 始终在快速后端之前请求快速后端
  • 如果在快速后端中找不到任何内容,则magento会在缓慢的后端中寻找

为什么要进行这两个级别的管理?memcached和其他快速后端是内存存储。因此,这意味着数据可能已损坏或消失。

如何提高配置性能?

禁用第二种书写方式可能是最有效的选择之一。您提到的第四篇文章对此进行了解释。但是,如果不进行修改,您将无法使用slow_backend_store_data源代码。在您的情况下,由于以下原因,我不建议进行此自定义:永远不会控制存储在缓存中的数据。您会将数据存储在内存中,可以提高性能,但可能会将无效的内容发送给访问者。因此,您需要找到一种解决方案,以确保具有内存访问权限(以获得更好的性能),写入控制以及禁用slow_backend_store_data缓存的功能。您可以通过以下方式达到此背景:

  • 用redis替换memcached服务器(redis可以像文件系统一样控制读写),并继续将apc用作字节码优化器

  • * 通过自定义源代码或切换到数据库慢速后端来确保您能够使用slow_backend_store_data选项*(是的,这会增加数据库服务器的负载,但是如果您定义了高速缓存策略,则不应使用一个问题)

  • * 停用slow_backend_store_data选项*:在此配置中,不再需要此操作,您已通过Redis完成了读写控制。


2

作为对此的附加说明,我们发现,当将APC与Magento一起使用(用于操作码缓存-我们将Redis用于常规的Magento页面和块缓存)时,重要的是要确保生产中的stat设置为0(但在生产中为1开发):

apc.stat = 0

apc.stat设置用于确定是否在每个请求上检查脚本,以确定是否已对其进行修改(http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat),因此在生产环境中将其设置为0将带来APC的性能优势,因为它无需对每个请求都执行此检查。

值得注意的是,一旦apc.stat设置为0,您可能将不得不重新启动Web服务器进程以获取文件更改(即部署后),但是无论如何这应该是部署后策略的一部分。


1

为了最大程度地加快后端速度,我们要做的最好的事情就是将REDIS安装为缓存处理程序。现在,Magento 1.8及更高版本的内核也支持它。

没什么可比的...现在是click click clickerdy click

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

另外,您可以考虑添加Redis Session扩展,也可以将会话添加到Redis内存服务器...

祝好运!


0

从这个local.xml文件中,Magento将选择最后一个条目并使用Memcache。我认为APC和Memcache如何与Magento配合使用时会出现混淆。

首先,APC有两种用途:

  • 操作码缓存-将您的php文件编译为操作码,使脚本执行速度提高约25%
  • 键/值存储-Magento可以将其用作缓存系统。

另一方面,Memcache只是键/值存储。Memcache的最大优点是它可以在客户端-服务器模式下工作,因此多个前端服务器可以使用相同的缓存,如果您有多个服务于同一网站的服务器,则必须这样做。

最常见的设置是安装APC来获取操作码缓存(这样,脚本执行速度将提高约25%),并将Memcache用作缓存服务器。我还将APC用作缓存系统,尽管从理论上讲它应该比Memcache快一点,但您无法分辨出区别。


因此,如果我阅读以下内容:最常见的设置是安装APC以获取操作码缓存(这样,脚本执行速度将提高约25%),并将Memcache用作缓存服务器。那我们如何一起使用呢?像这样
snh_nl13年

要同时使用两者,您根本不必声明与APC有关的任何内容。
Ben Lessani-Sonassi

因此,代码将包含所有内容吗?<cache> <backend> memcached </ backend>并保留第一部分
snh_nl 2013年

此外。对我来说,后端速度一直是衡量整体速度的指标(因为FPC等不适用于此处)...
snh_nl13年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.