我有一个web应用程序,最近几天一直承受着很大的负担。该应用程序运行在单台服务器上,该服务器具有8核、英特尔CPU、和4gb内存。软件:Drupal 5(Apache2,PHP5,MySQL5)运行在Debian上。
在达到500个经过身份验证的用户和200个匿名用户(同时)之后,应用程序将大大降低其性能,直至完全失败。最大的负载来自通过身份验证的用户,他们执行活动,导致在db上插入/更新/删除。我认为mysql是一个瓶颈。放慢这么多用户的速度是正常的吗?
编辑:--我忘了提到我做了某种分析。我运行了命令top, htop,它们告诉我所有的内存都是由MySQL使用的!过了一段时间,MySQL开始执行得非常慢,站点出现故障,我们必须重新启动/停止apache以减少负载。管理员说,当时大约有200个活动的mysql连接。
最糟糕的一点是,我们需要尽快解决这个问题,我不能进行深入的分析/代码重构,所以我考虑了两种方法:
发布于 2010-12-20 04:15:27
不可能给出特定数量的用户,这将导致任何随机应用程序的减速。这完全取决于应用程序的功能和运行方式。有很多事情要看。
发布于 2010-12-20 04:42:43
有两个重要的数字出现在我的脑海中:
为了确定这些值,您需要在增加用户数量的同时测试应用程序,例如,从一个用户开始,每分钟添加另一个用户,直到应用程序停止响应。测量内存和cpu使用情况非常重要,以便将它们与测试中的活动用户数量联系起来。
您的评论表明您找到了退化点,并且您认为您的数据库就是争用点。有两个MySQL启动参数可以帮助您验证您的假设,如下所示:
-日志-缓慢-查询
-日志查询-不使用-索引
使用"ps“监视您的进程,以确定哪些进程正在消耗更多的内存,哪些cpu用于确定体系结构的哪些部分正在消耗更多的资源。另一个很好的数据支持您的分析将是vmstat,也许每60秒。
简而言之,使用ps和vmstat启动监视器,在增加用户数量的同时强调应用程序,当应用程序减速时,停止监视器,同时绘制进程cpu和内存以及当前的活动用户计数,从那时起,您可以确定您的问题是CPU还是内存,一旦您发现问题是CPU还是内存,您只需为给定的资源选择前10个进程,这些都是争用的候选进程。检查MySQL日志,以确定在哪里可以添加新索引,并确定是否可以重写一些缓慢的查询。
发布于 2010-12-28 08:40:09
如何解决你的问题
建议
先决条件
Option1
Option2
https://stackoverflow.com/questions/4486545
复制相似问题