我在服务器上托管了一个带有 Smarty 缓存的 PHP/MySQL 应用程序。它经常通过向数千名关注者发送推文来获得短暂的流量高峰。流量高峰最多达到每秒 6 次点击,持续 20-30 分钟。之后会降低到每秒不到一次点击。在流量高峰期间,响应时间会变得非常糟糕,页面的响应时间最多需要两分钟以上。
我该如何管理?如何找出我的服务器的瓶颈?我在云端托管了一台 1GB RAM 的服务器,CPU 峰值很高。我应该购买更多 CPU 还是更多 RAM?
答案1
流量高峰达到每秒 6 次,持续 20-30 分钟
如果您认为每秒 6 次点击是峰值,那么您需要进行现实检查。我认为每秒 6 次点击是零负载情况。
在高峰期间,响应时间会变得非常糟糕,页面的响应时间可能长达两分钟以上
糟糕的编程或非常糟糕的服务器,比我的手机还小。
我在云端托管了一台 1GB RAM 的服务器,CPU 峰值。我应该购买更多 CPU 还是更多 RAM?
弄清楚。我基本上会告诉你,对于每秒有 6 次点击的请求,它不可能花几分钟来响应 - 尽管情况非常特殊。也许你错过了一个索引,迫使 MySQL 一直进行表扫描。我个人会非常担心,如果我无法在虚拟机的一个核心上处理每秒 6 个请求,几乎不管它有多大。或者 - 粗暴地说:我希望我的手机能做到这一点。上次我做了一个更大的网站,我们认为 30ms 是处理时间限制。这意味着每个核心每秒有超过 30 个请求。
否则,您需要弄清楚 - 如果您的 CPU 真的出现峰值,那么您需要更多的 CPU,如果 RAM 不够,它会转到磁盘,那么 CPU 就不会完全忙碌。但同样,这听起来像是“我的车只能开 30 公里/小时,请告诉我下一步该怎么调”,而车应该开得更快。这真的更像是糟糕的编程。
答案2
要尝试回答您的问题,您需要更好地了解导致速度变慢的原因。以下是您可以查看的一些事项:
在峰值期间,你的 mysql 查询是否很慢?(查看你的 mysql 慢速日志)
在这些峰值期间(请参阅),您同时运行了多少个 apache 进程(如果您正在运行 apache)
ps aux | grep apache | wc -l
以及与您的 maxclient 设置相比如何?每个 Apache 进程有多大?
你看过了
top
吗?mysql 使用了多少 RAM?(如果您有 phpmyadmin,请查看您的服务器状态)
答案3
绝对需要更多 RAM!每秒 6 次点击在计算上并不算多。即使不知道您的工作量的具体情况,1GB 内存也几乎肯定是您的瓶颈。