Drupal 有多少用户足以为web应用程序带来沉重的负载

Drupal 有多少用户足以为web应用程序带来沉重的负载,drupal,lamp,server-load,Drupal,Lamp,Server Load,我有一个web应用程序,最近几天它的负载一直很高。该应用程序在单台服务器上运行,该服务器具有8核Intel CPU和4gb RAM。软件:运行在Debian上的Drupal5(Apache2、PHP5、MySQL5) 在达到500个经过身份验证的用户和200个匿名用户(同时)后,应用程序的性能急剧下降,直至完全失败。最大的负载来自经过身份验证的用户,他们执行活动,导致在数据库上插入/更新/删除。我认为mysql是一个瓶颈。对如此多的用户放慢速度是正常的吗 编辑:我忘了提到我做了一些分析。我运行了

我有一个web应用程序,最近几天它的负载一直很高。该应用程序在单台服务器上运行,该服务器具有8核Intel CPU4gb RAM。软件:运行在Debian上的Drupal5(Apache2、PHP5、MySQL5)

在达到500个经过身份验证的用户和200个匿名用户(同时)后,应用程序的性能急剧下降,直至完全失败。最大的负载来自经过身份验证的用户,他们执行活动,导致在数据库上插入/更新/删除。我认为mysql是一个瓶颈。对如此多的用户放慢速度是正常的吗

编辑:我忘了提到我做了一些分析。我运行了命令
top,htop
,它们告诉我MySQL正在使用所有的内存!一段时间后,MySQL开始运行得非常慢,站点停止运行,我们必须重新启动/停止apache以减少负载。管理员说当时大约有200个活跃的mysql连接

最糟糕的是,我们需要尽快解决这个问题,我无法进行深入的分析/代码重构,因此我考虑两种方法:

  • 我的表是MyIsam,我听说他们使用表级锁定,这非常慢,对吗?我可以不用担心就把它换成Innodb吗
  • 如果我使用MySQL,并将其移动到具有大量RAM的专用机器上,会怎么样

    • 不可能给出会导致任何随机应用程序速度减慢的特定用户数。这完全取决于应用程序的功能和运行方式。有很多事情要看

    • 配置文件。通过配置文件器运行应用程序,尽可能多地使用真实世界。最好的做法是使用自动测试或一系列单元测试,这些测试贯穿所有层,以使分析会话尽可能可重复。即使您在较低负载下评测应用程序,也可以发现瓶颈并加以改进。您应该分析应用程序代码和SQL代码

    • 瓶颈。分析将告诉您哪些代码和/或查询占用的时间最多,修复这些代码和/或查询将大有帮助,但您还希望查找可以避免的体系结构瓶颈。您是否有用户正在等待他们不需要等待的写入?您是否可以使用生产者/消费者队列对某些非关键写入进行排队,以便应用程序能够更快地响应用户并将这些数据延迟地刷新到数据库中。是否有任何长时间运行的请求正在等待其他可以从异步处理中获益的外部资源

    • 缓存。是否存在可以缓存的请求或数据?即使这不是瓶颈,尽可能减少服务器上的负载也会有所帮助。特别是如果存在大量数据库争用,并且可以在应用程序中缓存一些常用数据,则可以避免一些数据库往返

    • 内存数据。看看应用程序是如何使用数据库的,看看数据库中是否有不需要的内容。如果是这样,将这些数据移动到内存中的数据结构(甚至是内存中的数据库)将极大地提高性能。虽然这通常是不可能的,但当它是,这是一个巨大的好处


    • 我脑海中浮现出两个重要的数字:

    • 降级点:应用程序速度减慢时的用户数
    • 断点:导致应用程序崩溃的用户数
    • 为了确定这些值,您需要在增加用户数量的同时测试应用程序,例如,从一个用户开始,每分钟添加一个用户,直到应用程序停止响应。测量内存和cpu使用情况以将它们与测试中的活动用户数关联起来非常重要

      您的评论表明您找到了降级点,并且您认为您的数据库是争用点。 有两个MySQL启动参数可以帮助您验证您的假设,如下所示:
      --记录慢速查询
      --不使用索引的日志查询

      用“ps”监视进程,以确定哪些进程消耗更多内存,用cpu确定体系结构的哪些部分消耗更多资源。用于分析的另一个很好的支持数据是vmstat输出,可能每60秒一次

      简言之,使用ps和vmstat启动监控器,在增加用户数量的同时对应用程序施加压力,当应用程序速度减慢时,停止监控器,并将进程cpu和内存与当前的活动用户计数一起绘制图表,从这一点上,您可以确定问题是cpu还是内存,一旦你弄明白了这一点,你只需要为给定的资源挑选前10个进程,这些进程是竞争的候选进程。 查看MySQL日志,确定可以在何处添加新索引,并确定是否可以重新编写一些较慢的查询

      快速说明如何解决您的问题 建议
      • 禁用统计模块

      • 移除所有非关键模块

      先决条件
      • 安装APC-或任何类似设备

      • 启用Drupal缓存-但不启用主动缓存

      选择1
      • Memcache+Memcache API-安装。这将通过为授权用户处理会话来减轻db的负担
      选择2
      • 缓存路由器安装。这将把数据库中的缓存get/set替换为所需的选项(Memcache,或者如果内存不足,则替换为filesystem)

      • 授权用户缓存安装它与cacherouter完美配合,但仅适用于6倍。此外,它还需要一些重新设计(但有一个名为EasyAuthCache的项目可能是h)