如何衡量和解决每天 60K PV 的网站的瓶颈 [关闭]

Posted

技术标签:

【中文标题】如何衡量和解决每天 60K PV 的网站的瓶颈 [关闭]【英文标题】:How to measure and solve the bottleneck in a website with 60K PV/day [closed] 【发布时间】:2012-02-23 05:23:16 【问题描述】:

我将尝试从我的真实生活示例开始:

我有一个网站,每天的页面浏览量约为 60K(由于谷歌实时分析,在高峰期,网站上有 100 名活跃访问者)。 Django+mysql+apache。 1 台具有 1024M RAM4 核 CPU 的 Linode 服务器,以及用于存储静态文件的 amazon S3 服务。事实证明,现在它达到了瓶颈(响应缓慢的高峰时间)。

我可以从内存中看到一件事,近 91% 的内存在高峰时间被消耗。但不确定是否还有其他瓶颈。

2 个问题:

1:在哪里:如果我想解决这个问题,我需要确切地知道问题出在哪里。所以我想知道如何衡量瓶颈在哪里?

2:如何:如何解决内存瓶颈?我能想到的一种方法是简单地添加更多内存,或者使用负载平衡器添加更多机器(当然它更昂贵......)。另一种方式,不确定,但可能从apache改为nginx

编辑

您还可以在此处看到top 命令生成的内存使用情况,30 个 apache 实例每个消耗 2% (20M) 的内存。 http://codepad.org/pUYdZhWq

【问题讨论】:

只是一个评论。除非我的数学是错误的,即使这 60K 的页面浏览量是在 2 小时内完成的,这也使得它每秒只有大约 8 次页面浏览量。使用四核 CPU,这似乎一点也不大。这些页面有 20MB 大吗? @JBNizet 无法回答您的问题,因为我也很困惑...从 top 命令的输出来看,似乎有 30 个 apache 实例,每个实例消耗了 %2 的内存:codepad.org/pUYdZhWq 【参考方案1】:

如果不详细了解您网站的行为方式,就很难提出建议。需要回答的问题清单非常庞大。简而言之,如果您要花钱请一位称职的人来调查该问题,这将比在服务器中添加另一块内存要多得多。

OTOH,如果我是被付钱解决问题的人,我首先要看的是服务器的速度 - 更快地处理请求意味着更少的请求驻留在内存中,意味着使用的内存更少由网络服务器(以及更多用于缓存/缓冲区)。因此,开始测量您的响应时间 (%D) 并分析数据。确保您使用的是操作码缓存,并为您的 php (ob_gzhandler()) 启用输出压缩,并为 Web 服务器上的 CSS javascripthtml 文件启用压缩。确保您已从 Apache 中剥离了所有未使用的模块,并且使用了合理的 keepalive 超时值(2 秒或更短)。

如果你正在运行任何 COMET 的东西,是的,你绝对应该切换到 nginx,否则好处是有限的。

【讨论】:

只有一件事。您提到了 PHP,但是 OP 询问的是 Django 应用程序。 我可以提供更多信息,这里是最上面的输出:codepad.org/pUYdZhWq 噢! (感谢 Ondrej)对不起,我以为我在 SO 中过滤 PHP 的东西。所以忘记操作码的东西 - 确保它没有使用 CGI(即 mod_python 或 fastcgi) - 其余部分仍然适用

以上是关于如何衡量和解决每天 60K PV 的网站的瓶颈 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

近7日pv是啥意思

PV和并发

大型网站架构——百万PV

大型网站架构之百万PV

查看网站pv

PV UV