非常担心 Magento 的性能
Posted
技术标签:
【中文标题】非常担心 Magento 的性能【英文标题】:Extremely worried about Magento performance 【发布时间】:2013-01-31 15:04:37 【问题描述】:我目前有 1 个 magento 应用运行 3 个不同的商店:
BelExpress Medical em Casa Medical Express(这个还在建设中)此存储的数据库大小为 370MB。这些商店共享 9.000 个 SKU,每个都有 1k 到 2k 分组产品(关联 SKU)。
运行 apache AB 基准测试工具,我每秒收到低至 0.29 个请求,我认为即使对于 magento 商店来说,这也是一个非常低的数字。
不过,最大的担忧是后端。目前有 5 人通过后端更新和插入新产品,更新/插入一个产品需要 4 分钟。这太浪费时间了,我一辈子都解释不了。
这是我服务器的资源:
处理器:AMD Athlon X2 3400+ (2x 1.8Ghz) 内存:4GB 磁盘:2x 500Gb我正在运行带有 eAccelerator 和 Memcahed 的 Debian Lenny Apache 2.0、php 版本 5.2.6-1+lenny16。 (您可以查看所有信息here)
这是我的 Apache、mysql 和 PHP 配置文件。
Apache MySQL PHP我不是服务器管理员(尽管我负责所有网站和服务器本身),所以可以说这不是我的“海滩”。我的问题是,这是它应该使用我当前资源的方式,还是我在我的配置中遗漏了一些重要的东西?
我意识到这似乎是我在寻找“手持”,但这不是我的意图。我只是厌倦了一遍又一遍地尝试新东西,我似乎无法让它顺利运行。
【问题讨论】:
这些商店的规模是多少,尤其是数据库。您应该拥有比数据库大小更多的内存。但请记住,Magento 的足迹很大,快速获得它很痛苦。 用这些细节更新了最初的问题。总而言之:14k 产品。 9k 简单和 5k 分组。分组产品具有与之关联的简单产品。 我对 eAccelerator 不熟悉,但它的缓存似乎已满。增加其缓存大小可能会有所帮助。问题可能至少部分与数据库有关;你能发布表格的结构吗? 自安装以来,数据库结构或多或少保持不变,您可以找到here 虽然这是 1.3 magento 版本的图表,我正在运行 1.7。从那以后发生了许多变化,但总体上保持不变。我正在运行平面目录选项,它忽略了 EAV 结构,但这仅适用于前端。编辑:找到我的特定版本的结构:here 听起来像INSERT
命令正在阻塞,所以增加缓存并尽可能修改 INSERT 命令 INSERT DELAYED
也许你可以加快速度。请注意,尽管我不知道您是否需要 insertID(没有任何 magento);如果你这样做,它甚至不会有一点帮助(很可能)。
【参考方案1】:
直接的答案是:服务器功率不足。无论您如何配置,都需要升级到更适合 Magento 的环境。
来源:http://www.cpubenchmark.net/cpu.php?cpu=AMD+Athlon+64+X2+Dual+Core+3400%2B
请注意,上面列出的 CPU 是非常高端的 CPU,其处理能力是 AMD 双核芯片的 10 倍。 我的笔记本电脑 CPU 是 Intel Core i7 2.2GHz 四核基准测试,大约 5,000。我建议您从list found here 购买 5,000 以上的 CPU。
16GB RAM 和 SSD 似乎也很明智/合理,因为这些天它的成本并不高。
【讨论】:
我目前正在升级服务器。新服务器将配备以下 CPU:Intel Xeon E3-1230 四核(该列表得分 8000) 内存:8GB DDR3 磁盘:2x 60Gb SSD(Raid 0)你认为足够吗? 是的,这听起来像个怪物!【参考方案2】:对于像 Magento 这样的网站,您的缓存大小太小了。我运行一个类似的站点,我们有 256mb 的缓存。使用 16mb,您将不断遇到缓存转储。
假设 Magento 旁边没有其他大型运行,您的服务器资源可以满足您的负载。这是一头猪,但它并没有那么糟糕,4gb 的 RAM 绰绰有余。
我会暂时禁用您的缓存,看看是否有任何改善。我还建议您查看 Magento 中的存储配置,因为您可能没有最好的缓存配置 - Magento 的缓存设置复杂且不透明。
【讨论】:
【参考方案3】:我知道这个帖子是古老的互联网时代。只是想我会添加一些我认为与大多数所有者/开发人员最相关的观点。 Magento 性能可能是一个很深的话题,需要考虑很多事情,但希望理解一些要点会大有帮助:
-
您使用缓存的次数越多(操作码缓存、MySQL 缓存、整页缓存等)硬件越不重要e。听起来不错,因为您当前使用的硬件很抱歉,非常糟糕(正如已经指出的那样)。您可以通过更好地利用缓存来解决这个问题并掩盖性能问题。最重要的是设置整页缓存 (google) 和操作码缓存。
虽然缓存有助于加快处理速度,但当您点击非缓存页面时会注意到硬件不佳,例如深度过滤的类别页面、搜索页面、购物车、结帐等。基本上任何独特的东西。当访问者点击这些页面之一时,您的大多数 cahces 都会被绕过,然后归结为良好的硬件/配置良好的设置。此时很明显存在性能问题。
一般来说,更快的 CPU(更高的 GHz)意味着可以更快地处理许多包含 Magento(大约 14,000 多个)的 PHP 文件。 PHP 几乎总是最大的瓶颈。
由于延迟较低,SSD 会有所帮助,但它们确实有助于更大的目录(系统中的更多产品或订单)。在这种情况下,SSD 通常会胜过 HDD(甚至 15k rpm),因为数据分布在驱动器上更大的部分,因此它必须反弹到硬盘上的不同物理位置才能访问各种 MySQL 表并访问数据. SSD 可以更好地处理这种“随机搜索”工作。如果您有足够的内存将整个数据库加载到内存中,那么这无关紧要,除非在结帐期间将订单写入数据库或保存购物车的产品数据等。
一个常见的误解是更多的 CPU 内核 = 更快的网站。这是非常具有误导性的。将 CPU 想象为主要高速公路。内核就像高速公路上的车道,而 CPU GHz 就像限速。您宁愿拥有 20 条时速 50 英里的车道还是 1 条时速 100 英里的车道?取决于流量,对吧!您网站上更多的并发访问者意味着更多的内核通常会有所帮助。如果您的流量相对较低,那么更少的内核但更高的时钟速度会更好。考虑到 Magento cron、索引器和在管理区域中工作的管理员之类的东西都会增加负载。如果您还添加了缓存程序,例如 redis、memcache、varnish 等,那么这些程序也会占用高速公路上的一些空间。
检查您的 CPU 或 HDD 是否过度使用的简单方法是检查服务器统计信息。尝试设置类似sar 的东西,它将每 10 分钟记录一次 CPU / 磁盘统计信息供您查看(可以自定义)。您将希望查看 CPU 的空闲时间百分比。更多空闲时间=不要太努力。可能不需要更多的核心。对于磁盘检查
iowait
列(或实时使用iostat
)。如果您的 iowait 较高,那么更好的磁盘或 SSD 可能会有所帮助。
您拥有的内存越多 = 您可以缓存的内存越多(以及您可以处理的连接数)。 一定数量的内存用于来自用户的每个连接(apache / nginx / mysql)和一般系统开销。您拥有的内存越多,您可以在内存中缓存的内容就越多,这会更快。例如,您可以调整 MySQL 并将大部分数据存储在内存中,以便更快地查找。这是因为 ram 不仅具有较低的延迟,而且需要较少的 CPU 周期来检索数据。结果是更快的负载(有时只是轻微的)和更低的 CPU 负载。您可以在内存中存储会话、Magento 缓存、整页缓存、MySQL 数据和其他项目。所以你需要的数量可能会有所不同,但这里有一个一般的经验法则:你的数据库的大小应该只占你内存的 25 - 50%。如果你有一个 1 GB 的 magento 数据库,你应该有大约 4 GB 的内存。这显然会改变您存储在内存中的更多会话或缓存页面等。
CDN 通常不会显着影响用户页面加载,但更重要的是减少了服务器负载。 CDN 的主要优势在于其服务器在物理上更靠近访问者以下载内容。考虑到更近的服务器可能只会从加载时间缩短 50 毫秒,这并没有那么大的影响。更重要的是,让 CDN 处理静态文件的所有请求可以让您的服务器主要处理动态请求。在某些情况下,这意味着 CDN 正在处理页面上加载的 90-99% 的资产(图像、css、js 等)的加载。在可能很严重的流量高峰/高负载下。
【讨论】:
正如我上面评论的,我已经升级了我的系统,但感谢您抽出宝贵的时间。一个人永远学不完,我相信其他人也会从您的回答中受益。【参考方案4】:我为一家在 7 个网站上处理超过 30k 种产品的公司进行 Web 开发,我们通常会尽量避免使用管理员来上传/编辑产品。我们使用magmi 进行上传和编辑。我们对这款产品非常满意。 您使用的是 ligtspeed 服务器吗?
【讨论】:
不,这是一个运行 mpm_worker 和 mpm_prefork 的普通 apache 2.0。【参考方案5】:如果您正在运行虚拟服务器,可能会考虑使用 Nginx 作为 Apache 替代品。我发现这可以提高性能。还要考虑实现某种缓存。我会推荐使用 Memcached 或 Redis(如果你可以让它运行的话)。这无疑会给您带来巨大的性能提升。
Magento 是一个数据库密集型系统。根据您网站的繁忙程度,您可能会添加更多内存,以确保您有足够的内存来运行正在运行的进程数量。
【讨论】:
【参考方案6】:Magento 需要大量资源。后端结构是一种缓慢且难以优化的东西。但我建议从 csv/xml 导入所有产品,而不是手动操作。你会发现很多关于这方面的教程。
要优化前端,这里有一些提示:
请参阅 GTMetrix 以了解您的性能指标:http://gtmetrix.com/reports/www.belexpress.eu/k2bPETVr 您的主页太大。页面在首次加载时不应超过 1MB。您应该使用延迟加载、优化图像等来加快速度。
一些技巧可以让性能变得非常好,但是你需要一个更大的服务器,如果你的网站产生流量并且你能够每月获得 500 美元的托管费用,你可以找到非常强大的服务器配置,例如6 个四核、48GB RAM、SSD 磁盘、10GB/s 网络和无限带宽。
如果您选择更好的托管解决方案(使用更强大的服务器),您可以通过将最常用的目录(如 /var 和 /include/src)作为 RAM 来获得性能(如果您使用编译)。仅当您不每天对代码进行更改时才使用编译,如果不这样做,编译 + 挂载 /include/src 作为 RAM 会给您带来非常好的性能提升。
我不太了解 eAccelerator 和 memcached,我个人使用 APC,并用 Varnish 替换了端口 80。这为我的网站提供了额外的速度。
让 Magento 快速运行是一项优化各个方面的日常工作,没有魔术。
问候,
【讨论】:
他不可能需要一个 24 核、48gb ram 设置来运行三个少于 5k 产品的商店。 这是一个例子,如果您的网站每天处理 100 个订单并每天产生 1 万美元,为什么您不能拥有一个非常大的服务器?对于 5k 产品和 3 个商店,我建议至少 2 个四核和 12GB RAM 用于将 hd 安装为 RAM 因为问题显然不是容量。因此,更强大的服务器是否会使事情变得更快并不完全明显 - 例如,如果问题是持续缓存转储而不是缓存错误配置将是 256mb 内存或 64GB 内存的问题。 你是对的。 +1。除了极少数情况,硬件必须是最后的优化。但是为了实现一些强大的功能,他需要更好的服务器。【参考方案7】:如果你完成了开发,我会禁用 mysql 上的慢查询日志记录(从你的 my.cnf 复制的行):
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
您没有发布您的 .htaccess 文件,其中一些 php 和 apache 设置可以被覆盖。
您是否在 /app/etc/local.xml 中添加了缓存设置?如果没有,请查看 /app/etc/local.xml.additional 并应用最适合您的内容。
【讨论】:
以上是关于非常担心 Magento 的性能的主要内容,如果未能解决你的问题,请参考以下文章