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

Geo*_*rge 2 mysql php performance drupal apache-2.2

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

MySQL 已经获得了大量内存,我已经确认 MySQL 实际上是通过“top”使用这些内存的:

innodb_buffer_pool_size = 15G
Run Code Online (Sandbox Code Playgroud)

PHP 已经获得了大量内存(几乎可以肯定是太多了,因为我注意到评论说“每个脚本”):

memory_limit = 6000M
Run Code Online (Sandbox Code Playgroud)

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

StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
Run Code Online (Sandbox Code Playgroud)

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

  • 5 个用户:~1s 平均响应时间
  • 10 个用户:~1.3s 平均响应时间
  • 20 个用户:~2.5s 平均响应时间

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

为了提高性能,我可以做出的最佳改进是什么?

Dav*_*d W 7

Drupal Answers可能更适合这个问题,但这里有一些东西给你:

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

现在对于 Apache .... 不要使用开箱即用的 Apache 配置。您需要针对您的站点调整 Apache。假设您正在使用mod_prefork(我会说这很有可能,但只有您可以确定)这是其完成方式的基础知识,但您真的应该雇用知道他们在做什么的人。

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

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