我在 Digital Ocean 上为最小的 droplet 设置了一个 wordpress,使用了几个月。
最近,我的博客爆红(Facebook 分享超过 1000 次),服务器需要 50 多秒才能响应。(Google Analytics 显示今天几乎全天都有大约 40 个人同时访问我的博客。)
我询问了 Digital Ocean 支持团队,他们告诉我我的 512 mb RAM 太小了。
但我使用 'free -m' 并看到
total used free shared buffers cached
Mem: 490 465 24 64 94 136
-/+ buffers/cache: 234 256
Swap: 999 0 999
所以我认为我有 256 MB 可用内存?
我告诉他们,他们说“虽然它可能显示有 100MB 的可用内存,但这可能只是在它终止了一些服务以节省内存之后才会出现。”
但我使用 'top' 并看到
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
我发现CPU停留在92~100%之间,所以我认为我的CPU并不忙。
那么我如何才能找到瓶颈呢?
我想要知道在支付更多升级费用之前,瓶颈是什么。
答案1
在研究性能问题时,重要的是要记住“四大”:
-CPU
-内存
-磁盘 -
网络
我非常喜欢使用atop
CPU 和内存利用率、iotop
磁盘使用率和iftop
网络流量。请记住,这些指标仅在服务器负载过大并遇到此问题时才有用。
上述四大指标中的任何一个都可能导致请求页面时处理延迟。您提到这个网站是一个博客,但没有提到内容是否动态生成,这将为这个等式添加另一层 - 数据库。查询响应时间长可能会导致涓滴效应,从而导致页面加载时间长。
答案2
唯一可以确定的测试方法是运行“ab”之类的基准测试,测试您的网站可以承受的访问者数量,同时排除服务器上的故障。运行以下命令:
$ ab -n 10000 -c 50 http://yoursite.com/
从您的电脑或其他服务器。
这将向您的服务器发送 10,000 个请求,但并发请求不会超过 50 个。在开始测试之前,请在您的 Web 服务器上运行 htop,并观察新进程生成以及内存和 CPU 负载变化时的活动。
由于您没有解释您的 Web 服务器设置(您是否使用 apache/mod_php 或 nginx/php-fpm 或其他组合) - 我们甚至无法猜测每个用户的内存消耗量。
我的印象是,随着用户数量的增长,您的服务器开始交换并使用实际位于硬盘上的额外 1GB 虚拟内存。过度交换意味着用户正在等待由内存位于磁盘上的进程提供服务,这可以解释您观察到的那些缓慢现象。但如果没有更多信息,我们帮不上什么忙。