我有一台运行 Centos 6 的虚拟机主机。它使用 apache/php/mysql 为 android 应用程序提供服务。当在线用户数量增加时,服务器响应非常慢。甚至与服务器的 ssh 连接也变得很慢。
那么我如何才能找到造成此问题的瓶颈并修复它?是 RAM 不足还是硬盘写入/读取过多,CPU 使用率过高,哪个程序导致了这种情况?
这是正常情况下 free -m 的输出:
total used free shared buffers cached
Mem: 1877 1714 162 0 16 202
-/+ buffers/cache: 1495 381
Swap: 1023 231 792
正常情况下htop的输出: htop 的输出
答案1
输出free -h
显示,80% 的内存用于缓存和缓冲区以外的用途(1877 个内存中有 1495 个)。使用率相当高。此外,只有 202 个用于缓存,数量并不多。
在这种情况下,任何依赖磁盘 I/O 的操作都可能会很慢。问题在于您的工作负载是否受 I/O 限制。
当我们查看htop
输出时,我们发现 2 个 CPU 的平均负载为 50%,但平均负载约为 2。
由此我们可以得出结论,平均负载的主要贡献者不是 CPU,而是 I/O。因此,您的工作负载似乎受 I/O 限制,并且只有极少量内存可用于缓存。
基于此,我认为内存不足是导致您遇到任何缓慢问题的主要原因。如果您将内存从 2GB 增加一倍到 4GB,您可能会看到显著的改进。
答案2
那么我如何才能找到造成此问题的瓶颈并修复它?是 RAM 不足还是硬盘写入/读取过多,CPU 使用率过高,哪个程序导致了这种情况?
可以是上述任何一种,也可以是上述的组合,或者全部。甚至可能是完全不同的东西。和你一样,没有额外的信息我们就无法做出决定。你需要安装监控,收集信息,分析收集到的信息,并根据发现的内容做出决定。
答案3
确保将您的应用程序托管在使用 SSD 的 VPS 上。
您可以尝试优化 Apache 和 MySQL 服务,并在有大量在线用户时密切监控 CPU 和 RAM 的使用情况。