Magento页面加载花费太多时间


10

我有magento网站。没有任何用户(一次最多2-3个)。

我们的服务器是:CPU:2000MHz RAM:2048Mb HDD:50000Mb。

我安装了ZendServerCE(apc + memcached + Zend Optimizer + Zend数据缓存)。我关闭了memcached,因为网站加载情况更糟。我在管理控制台中设置了平面类型结构,重新索引和缓存的数据。

所以我有apc + Zend Optimizer + Zend数据缓存

  1. 第一个问题是我检查了运行时调度如何工作。start_session()调用大约需要500-700ms。似乎效果不好。为什么这么久,我不知道。

  2. 我已经阅读了这篇文章:http : //dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size并找出了适合我服务器的最佳选择。

每小时:

Key_read_requests = 8887
Key_reads         = 252
Key_write_request = 187
Key_writes        = 146 

您会看到252/8887> 0.01,但不是太多。这是我获得的最佳价值。其他结果从> 6开始。

这是my.cnf:

key_buffer              = 48M
myisam_sort_buffer      = 2M
sort_buffer             = 2M
read_buffer_size        = 2M
join_buffer             = 2M
read_rnd_buffer         = 2M
max_allowed_packet      = 128M
thread_stack            = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover         = BACKUP
max_connections        = 50
table_cache            = 256
#thread_concurrency     = 10
query_cache_limit       = 8M
query_cache_size        = 98M

3.由于某些原因,Memcached不好。我把它关了。但是zend数据缓存和zend优化器仍然可以使用。

4。APC似乎正确。第一次加载控制器动作需要3-4秒(我在那里设置die()进行检查),并且第一次需要1-1.3秒。

5。几分钟后,我重新启动了mysql,结果很好。页面加载时间为1.5到2.5秒。但是现在(几个小时后)需要6到10秒钟。我找不到原因。

那么您在这里看到一些不正确的配置吗?可能是我的服务器不适合magento吗?

更新1: 今天大约有600个类别和1000种产品,将来大约有20000个类别(针对不同的网上商店)和1500-3000个产品。

属性不多。

更新2 我认为ssh控制台的工作速度太慢。我重新启动服务器,现在它可以快速运行。这表示我的RAM有问题。没有足够的空间。

这是apache的初始状态:

             total       used       free     shared    buffers     cached
Mem:          2048        600       1447

更新3 我明白了。现在加载0.5-1.5秒

这是配置: mysql

[mysqld]
key_buffer_size         = 256M
tmp_table_size      = 32M
max_heap_table_size     = 32M
myisam_sort_buffer      = 4M
sort_buffer             = 4M
read_buffer_size        = 4M
join_buffer     = 4M
read_rnd_buffer     = 4M
max_allowed_packet  = 64M
thread_stack        = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover          = BACKUP
max_connections         = 20
table_cache             = 1024
innodb_buffer_pool_size = 128M
query_cache_limit   = 24M
query_cache_size        = 256M

的PHP

[apc]
apc.stat=1
apc.enabled=1
apc.optimization=0
apc.cache_by_default=1
apc.shm_segments=10
apc.shm_size=256M
apc.ttl=0
apc.user_ttl=0
apc.num_files_hint=10000
;apc.mmap_file_mask="/tmp/apc"
apc.max_file_size=5M
apc.enable_cli=1
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.slam_defense=0
apc.user_entries_hint=10000

一切正常,但仍然存在一个问题。APC向我显示了这一统计信息: 在此处输入图片说明

为什么命中率这么小?有任何想法吗?


如果您删除有关Magneto安装的几行内容(例如,目录大小,修改,扩展等),那将是很好的。
user487772 2013年

任何人都无法发布一系列配置文件让您能够正确设置服务器。有几十个文件;为了充分利用可用硬件,需要对软件进行特定的修订,并进行系统级别的更改。
Ben Lessani-Sonassi

请说明为什么要设置低票
安东尼

@Tim我更新了问题
Anthony

2
我会xhprof尝试获取最耗时的加载内容的可视化。这是生产服务器负载还是仅用于测试?
philwinkle

Answers:


6

由于该问题似乎不是以magento为中心的,因此这是我不是以magento为中心的答案。

OpCode缓存和数据库优化是在某种程度上加速Web应用程序的好方法。但是收益将相对适中。为了真正提高速度,您应该考虑使用清漆缓存。它是开源的,易于配置并且易于与magento集成,这要归功于可免费获得的magento模块。

还有一篇很好的文章,简要介绍了它的工作原理:http : //www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html

特别考虑一下图表:

页/秒


4
如果您已经有一家快速商店并且想要抵消资源,那么Varnish就是很棒的选择。但这绝不能用来掩盖商店缓慢的事实。页面仍然必须首先生成-因此无论如何,它们总是6-10秒的页面加载时间。
Ben Lessani-Sonassi

似乎就像我以前使用过的memcached。我认为我在mysql属性中确实做错了事,或者服务器太弱
安东尼

2

如果您的业务依赖于主机的良好性能,那么为什么要尝试在没有经验的情况下管理服务器。

您一定会通过联系专业的Magento主机并让他们进行系统管理来受益,而这正是您擅长的事情,就是管理商店。

查看规格,您没有足够的内存来尝试运行Magento存储。有很多类似的问题,例如您的问题,

https://serverfault.com/a/400748/113375
/server/430565/magento-hosting-on-a-budget


因为我们的客户预算有限。我应该为magento主机支付超过50欧元的费用。我们对主机的限制是每年150-200欧元-)无论如何,感谢您的链接
安东尼

1
然后,客户可以期望通过100%的优化获得每年约20-40,000美元的收入(托管收入的0.5-1%)。这里有很多人可以为您提供所有详细信息和技术设置,但您却在努力做到事半功倍。您可能会使其在技术方面起作用,但在业务方面却会陷入困境。除非您的动态网页加载量(不包括fpc)低于3秒,否则您将失去56%的访问者,理想情况下,定位目标为1-2s-Google和访问者转化将对网站造成不利影响-艰难的举动。在这种情况下,有95%到99%的可能性> 3s的页面加载和/或网站崩溃。

1

这是物理硬件还是虚拟专用服务器?您可能应该将数据库移至其自己的专用服务器。这也使您能够隔离速度问题是由Apache / PHP还是由MySQL带来的好处。

start_session()太慢意味着您可能正遭受硬件不足的困扰。我不知道您的技术选择是否意味着会话存储在磁盘或RAM中,但是500-700ms几乎可以肯定意味着它们存储在磁盘中,并且您遇到I / O性能问题-可能是因为您的数据库交换到磁盘,因为它不适合RAM ...但这只是猜测。

祝好运!


感谢您的回答!我使用VPS。它不适用于magento,但我有一个任务要在此范围内对其进行优化。是否可以检查数据库是否正在交换到磁盘?
安东尼

1
free -m会告诉您是否正在使用交换,并且该top命令的最新版本将告诉您是否按O和P来按交换使用顺序进行排序。否则,您将不得不使用类似以下内容的mysqld进程ID:awk '/^Swap:/ { SWAP+=$2 } END { print SWAP" kB" }' /proc/$(pidof mysqld)/smaps 全部描述于此:dbasquare.com/2012/04/10/…–
Ralph Tice

1

显然没有办法向您展示可以提高性能的“工作配置”,但是Magento实际上确实尝试执行此类操作,并在其性能白皮书中发布了高度配置的LAMP堆栈的示例。这些白皮书的方法适用于CE和EE。我强烈建议您完整阅读这两个白皮书,因为那里提出的想法与该主题很相似,并且直接从以下来源直接提供了非常具体的Magento建议:http : //www.magentocommerce.com/whitepaper/


1

组态

ZendFramework(zend优化器和zend数据缓存)+ APC + Memcache + Nginx

对我来说很完美。

超过30位并发用户可以在不到一秒的时间内加载页面(〜0.4s-0.6s)

我将nginx设置为80端口(作为代理),将apache设置为8080。

感谢@MattSchweers提供的链接。我忘了 它可以帮助我配置MySQL


没问题!实际上,我本周使用这些白皮书进行了一些MySQL调整-效果很好。

1

以我的经验,litespeed服务器将性能提升了2倍,相当于每月$ 32的1cpu许可证。有人告诉我您只需要1cpu许可证,因为php在litespeed中单独运行。


Web服务器不是瓶颈。PHP是,更改为Litespeed根本不会更改任何内容。
Ben Lessani-Sonassi

虽然我通常认为Litespeed是Magento的绝佳选择,但这个答案可能无法解决OP带来的问题,而且超出了他的预算。
普雷斯顿2014年

0

当您拥有多个网上商店和多个类别时,Magento本质上将为所有网上商店,类别和产品创建一种凯氏分类的条目产品,这将对数据库造成很大的负担。您的APC未命中率很高,您需要对其进行调查。但是,即使您确实修复了APC,我认为您的性能问题也可能会持续存在,尤其是在流量增加的情况下。要加快网站的运行速度,您需要安装操作缓存,包括Varnish缓存或整页缓存(如果是Enterprise Edition)。

Magento对DB进行了大量读写操作,因此您还可以尝试使MySQl处于Master Slave复制模式,并且所有magento都从slave读取,而写入发生在master上。


0

我会尝试更改以下APC选项,然后查看点击是否增加。

apc.shm_segments 1

apc.ttl 7200

apc.user_ttl 7200

在实时站点上,您也可以使用以下内容。

apc.stat 0

自文件上次编译以来,这将停止APC检查文件是否已更改,从而大大提高了速度。只是不要忘记在编辑PHP文件时刷新APC缓存。


0

结合其他想法。您可能要增加innodb_buffer_pool_size,128M可能会有点低,甚至小型站点也可能会很快增长。该变量指示您的内存中保留了多少数据。

Magento将其用于所有表,包括迅速增长的日志表。您将要确保限制所保留的数据量。从命令行运行“ php shell / log.php --status”将使您了解自己所处的位置以及是否失控。还有一些选项可以用来清理日志表。

2GB的RAM不足以使用,因此您确实需要注意分配内存的位置。

此外,“全页缓存+缓存预热器”还可以帮助您保持网站的目录和cms页面准备就绪并快速。您可以在这里看到我们的网站:http : //ecommerce.brimllc.com/full-page-cache-magento.html

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.