为什么drupal慢?

时间:2011-05-18 14:31:28

标签: php drupal drupal-6 drupal-modules drupal-7

我在drupal上制作了网站

我的网站有7500个用户,大约(20到50个没有登录)(2到10个登录用户)用户在线(我觉得这不是很多流量)

该网站位于专用服务器上。我已经启用了drupal admin的性能设置,还安装了memcache和eaccelerator

我查看了使用devel模块的查询日志。它在每个页面上总共发出600到900个查询

当我安装了path.inc补丁以减少drupal_look_path()的查询时。它将查询减少到大约400

我还在mysql(my.cnf)文件中做了一些积极的更改,但仍有许多相同的查询一次又一次地运行user_load()函数

我启用了60到70个模块,并且所有模块都已满。我无法删除模块

网站运行速度仍然很慢,需要大约10到15秒

现在我不知道为什么网站运行这么慢

  • 是因为drupal有大的PHP代码吗?
  • 是因为它在每个页面上发出了这么多查询吗?
  • InnoDB引擎是否提高了性能?

请欢迎任何建议

5 个答案:

答案 0 :(得分:9)

每个请求的400个查询是一个完整的(但甚至是50 +)。

你应该实现一些html cacher。我的网站通常甚至不做数据库连接。它只是触发缓存在文件中的html。

答案 1 :(得分:6)

需要考虑的其他一些事项:

  • 安装像Yslow / PageSpeed这样的工具,看看这些10-15中有多少是客户端和服务器时间。

  • 与Devel一起安装XhProf(在开发站点上,不在线)以查看哪些功能占用时间最多。先看看这些。编辑,现在使用链接:http://groups.drupal.org/node/82889

  • 使用pressflow 可能有所帮助,但由于你使用的是路径补丁,可能没那么多。

  • 您提到您安装了memcache。您是否还安装了memcache模块并配置缓存插件以使用memcache?

  • 编辑:是的,切换到InnoDB可以提供帮助。 InnoDB的主要性能优势之一是行级锁定(与MyISAM的表级锁定相反),这意味着除非确实需要,否则针对同一个表的多个INSERT / UPDATE查询不会相互阻塞。但是,InnoDB在开箱即用方面表现不佳,你真的需要微调你的特定站点的mysql配置。因此,在开发站点上进行测试和优化之后,您应该仔细考虑这一步骤。关于InnoDB调整,本网站和其他地方已经存在各种问题......

除此之外的任何内容都是特定于站点的,取决于您使用的模块。但特别是复杂的node_access设置和多种语言(i18n!)往往导致查询速度慢和/或很多。

答案 2 :(得分:1)

并非所有模块都使用您可以在性能设置区域中打开的缓存机制。值得尝试确定哪些人正在进行最多/最慢的查询,并试图让开发人员改进它们。

或者,检查您是否可以使用更少的模块来实现。有些模块在功能上有些重叠,因此您可以重新组织网站的功能。

此外,您需要查看您的设置MySQL是否允许执行这些查询的足够内存。大多数MySQL发行版都附带了my.ini的不同版本标记为' small',' medium',' huge'等。复制'巨大的'一个到my.ini(先备份旧的)并重新启动数据库以查看最大化所有高速缓存大小是否有所不同。你可能在那里有一个瓶颈,但很难找出导致它的设置。

PHP同样如此。将php.ini中的memory_limit设置为500MB或其他东西,看看是否有帮助。当然,根据您的托管安排,您可能无法做到这一点,但如果可以的话,它将消除一个可能的原因(或不会)。

答案 3 :(得分:0)

您的Drupal网站的性能还取决于您的托管平台针对Drupal的调整情况。 Drupal需要对LAMP堆栈组件进行特殊优化。您可以尝试特定于Drupal的托管公司http://www.drupalspecific.com,以使您的网站运行得更快。

答案 4 :(得分:0)

自己面对drupal慢度问题。但与其他人提到的问题截然不同。

我禁用了特定内容类型的drupal页面的drupal标题的所有内容。

这个页面加载的时间仍然超过20秒!

我接受了YSlow和NET firebug面板的帮助。

看着他们,注意到:

单独包含JS和CSS文件需要3到2秒,并且会发生相当多的内容,因此需要20秒。

但是我无法弄清楚,为什么js和css包含这么多时间。 (这包括正常的drupal核心js和css文件)