我如何通过大量的并发用户来提高Drupal站点的性能?

我有一个Drupal站点,可能会在发布时获得非常高的命中率。 我们已经租了一个非常强大的服务器的初始发射,之后,我们将缩小。 该服务器有一个Xeon E5-2670 8核心处理器@ 2.6GHz和30GB的RAM。

MySQL已经被赋予了大量的内存,并且我已经证实MySQL实际上是通过“top”来使用这个内存的:

innodb_buffer_pool_size = 15G 

PHP已经被赋予了大量的内存(现在几乎可以肯定是太多了,我注意到了“每个脚本”的评论):

 memory_limit = 6000M 

Apacheconfiguration是开箱即用的默认设置:

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

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

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

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

我可以提高性能的最佳改进是什么?

Drupal的答案可能是更适合这个问题,但这里有几件事情给你:

  • 尽可能在Drupal和服务器上使用caching。
  • 如果大部分stream量都是匿名的,请考虑使用反向代理(如Varnish) 。 有一个模块可以帮助Drupal更好地利用Varnish。 如果您决定实施清漆,请使用它。
  • 看看使用类似于memcache的东西。
  • 如果您的Drupal站点是在Drupal 6中构build的,那么考虑将您的原始Drupal代码转换为Pressflow Drupal站点(这很容易)。 Pressflow包含了大量的性能优化(但是如果你正在运行Drupal 7,那么它是一个有争议的问题)。

现在对于Apache …不要使用开箱即用的Apacheconfiguration。 你需要调整Apache到你的网站。 假设你正在使用mod_prefork (我认为这很有可能,但只有你可以确定)这是如何完成的基本知识,但你应该聘请一个知道自己在做什么的人。

  • 找出您希望Apache能够使用的最大内存量。
  • 严重testing你的网站,并确定每个Apache进程使用多less内存(使用top )。
  • 以最多使用最多内存的Apache进程为参考,向其中添加一点点,然后用这个新数字除以第一个数字(您希望Apache使用的最大内存量)。
  • 你得到的数字应该是你的MaxClientsServerLimitvariables。

这当然不是最终的答案。 调整您的服务器需要时间,并需要经验才能正确。 祝你好运。

这里有几个模块(Boost,Varnish等),如果你主要有匿名用户,它可以帮助你提升事物。 但是,如果用户在您的网站上创buildconfiguration文件并login,他们将无法帮助您。

这是我如何设置Drupal的服务器:

  • 禁用更新pipe理器模块。 它减慢你的网站。
  • 我用Nginx和phpfpm取代了Apache。 你可能需要自己设置和configuration。 即使我没有做任何“正式”的基准testing,我的印象是Nginx + phpfpm更快地处理请求。 这是 Nginx和Drupal 的configuration 。
  • 优化MySQL和InnoDB表。 查看MySQL性能博客 。

可能会有很多小的改进,但是我认为这至less可以成为事情的起点。

通过使用像memcache这样的兑现工具,获得所有的静态页面,经常使用的页面,菜单和超链接。 Drupal的问题是每个页面加载都有很多数据库访问,并且完全重新加载每个页面。