我在数字海洋上为最小的液滴设置了几个月的wordpress。
最近,我的博客病毒(1000+ Facebook的股份),服务器需要50多秒的时间来回应(谷歌分析显示,今天几乎整个一天,我的博客上同时有大约40人)。
我问数字海洋支持团队,他们告诉我,我的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的内存,可能只有在它杀了一些服务,以节省内存。
但我用'顶'看
%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%的ID,所以我认为我的CPU不忙。
那么我怎么能find瓶颈?
我想知道什么是瓶颈,我付出更多的升级之前。
在研究性能问题时,记住“大四”很重要:
-中央处理器
-记忆
-disk
-networking
我非常喜欢使用CPU和内存利用率, iotop用于磁盘使用率, iftop用于networkingstream量。 请记住,这些指标仅在服务器处于负载状态并遇到此问题时才有用。
上述四大事件中的任何一个在请求页面时都会导致大量的处理延迟。 你提到这个网站是一个博客,但没有提及内容是否是dynamic生成的,这会为这个等式增加另一个层次 – 数据库。 长查询响应时间可能会导致涓滴效应,导致页面加载时间过长。
唯一可以testing的方法是运行“ab”这样的基准testing,并testing您的站点能够维持的数量或访问者数量,同时排除服务器上正在发生的事情。 运行类似于:
$ ab -n 10000 -c 50 http://yoursite.com/
从你的电脑或其他服务器。
这会以10'000个请求来触发您的服务器,但不会超过50个并发。 在开始testing之前,在您的networking服务器上运行htop并观察活动,随着新的进程的产生以及内存和CPU负载的变化。
既然你没有解释你的networking服务器设置(你使用apache / mod_php或nginx / php-fpm或其他组合) – 我们甚至不能远程猜测每个用户的内存消耗。
我的印象是,随着用户数量的增长,你的服务器开始交换,并使用额外的1GB的虚拟内存,这实际上是在硬盘上。 过度交换意味着用户正在等待内存在磁盘上的进程提供服务,这可以解释您正在观察的缓慢。 但没有额外的信息,我们不能帮上忙。