如何提高具有大量并发用户的 Drupal 网站的性能?

如何提高具有大量并发用户的 Drupal 网站的性能?

我有一个 Drupal 网站,在发布时可能会获得非常高的点击率。我们为首次发布租用了一台非常强大的服务器,之后我们会缩减规模。该服务器配备了 Xeon E5-2670 8 核处理器 @ 2.6ghz 和 30gb RAM。

MySQL 已被分配了大量的内存,并且我已经通过“top”确认 MySQL 确实正在使用这些内存:

innodb_buffer_pool_size = 15G

PHP 被赋予了大量的内存(几乎可以肯定是太多了,因为我注意到注释上说的是“每个脚本”):

memory_limit = 6000M

Apache 配置是开箱即用的默认配置:

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000

我一直在运行 JMeter 测试(基本上是“在网站上投入尽可能多的线程并尽可能快地请求页面”)并且我可以看到随着并发用户数量的增加,性能下降:

  • 5 个用户:平均响应时间约 1 秒
  • 10 个用户:平均响应时间约 1.3 秒
  • 20 位用户:平均响应时间约 2.5 秒

但是,机器上的负载仍然很低。在测试期间,“top”报告有 26gb 的可用内存,“uptime”的平均负载不超过 0.63。我怀疑我们仍然有很多资源可以投入到性能中,但 Apache 并没有充分利用这些资源。话虽如此,我是一名开发人员,而不是系统管理员,我也不是服务器性能方面的专家。

我可以做哪些最好的改进来提高性能?

答案1

Drupal 解答可能更适合这个问题,但这里有几点需要注意:

  • 尽可能在 Drupal 和服务器上使用缓存。
  • 如果你的大部分流量都是匿名的,请考虑使用反向代理,例如有一个模块它可以帮助 Drupal 更好地利用 Varnish。如果您决定实施 Varnish,请使用它。
  • 考虑使用类似内存缓存也一样。
  • 如果你的 Drupal 网站是用 Drupal 6 构建的,那么可以考虑将你的原始 Drupal 代码转换为Pressflow Drupal网站(很简单)。Pressflow 包含许多性能优化(但如果您运行的是 Drupal 7,那么这一点就毫无意义了)。

现在对于 Apache....不要使用现成的 Apache 配置。您需要根据站点调整 Apache。假设您正在使用mod_prefork(我认为这很有可能,但只有您才能确定)以下是完成此操作的基本方法,但您确实应该聘请知道自己在做什么的人。

  • 确定您希望 Apache 能够使用的最大内存量。
  • 大量测试您的网站,并确定每个 Apache 进程使用了​​多少内存(使用top)。
  • 取出顶部使用最多内存的 Apache 进程,向其添加一点点以获得更好的效果,然后用您的第一个数字(您希望 Apache 使用的最大内存量)除以这个新数字。
  • 您得到的数字应该是您的MaxClients&ServerLimit变量。

这当然不是最终答案。调整服务器需要时间,并且需要经验才能做到恰到好处。祝你好运。

答案2

如果您的大多数用户都是匿名用户,那么有一些模块(Boost、Varnish 等)可以帮助您提升性能。但是,如果用户在您的网站上创建个人资料并登录,它们对您帮助不大。

这是我为 Drupal 设置服务器的方式:

  • 禁用更新管理器模块。它会减慢您的网站速度。
  • 我已经用 Nginx 和 phpfpm 替换了 Apache。您可能需要自己设置和配置。尽管我没有做过任何“正式”的基准测试,但我的印象是 Nginx + phpfpm 处理请求的速度更快。这是一个配置适用于 Nginx 和 Drupal。
  • 优化 MySQL 和 InnoDB 表。请参阅MySQL 性能博客

可能还有很多小的改进可以使事情更进一步,但我认为这至少可以作为一个起点。

答案3

使用缓存工具(如 memcache)缓存所有静态页面、常用页面、菜单和超链接。Drupal 的问题在于每次加载页面时都会进行大量数据库访问,并且会完全重新加载每个页面。

相关内容