我们有一个通过 GoDaddy 托管的 Linux 虚拟服务器,我们的网站最近运行缓慢。我稍微检查了一下服务器(我不是系统管理员,对 Linux 的经验非常有限,主要是从 C 编程课程中学到的)。
以下是 free -m 命令得到的结果:
[~]# free -m
total used free shared buffers cached
Mem: 2048 2048 0 0 0 0
-/+ buffers/cache: 2048 0
Swap: 0 0 0
我理解这个命令和结果的原因是所有内存都被使用了,没有一个在缓冲区中,这让我感到非常糟糕。我确实注意到我们的 mysql 部分使用了大约 22% 的内存,但我不想弄乱它,因为数据库很重要(并不是说我认为这会破坏数据库,但它肯定会使其无法访问,这很糟糕)。我认为服务器重启是最好的办法,但我的老板不想让网站停机哪怕一秒钟,所以现在不行。我还能做些什么来改善这种情况?
我不确定这里哪些信息是至关重要且有用的,因此如果有人要求,我会用信息更新此信息。这是一台生产服务器,所以我不想做任何删除缓存之类的事情。
答案1
您没有剩余内存。您必须优化您的进程(mysql、apache 或 nginx)或升级到具有更多内存的下一个虚拟服务器包。
重新启动无法解决您的问题,因为内存会再次增加。
您的网站上有运行任何脚本吗?您是否确保它们没有因代码而导致内存泄漏?
安装 HTOP,它是 TOP 的改进版本,可以查看您的资源使用情况:
yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
yum install htop
答案2
正如另一个答案所述,检查 htop 以了解正在运行的进程。此外,请务必使用 yum update 升级所有软件包
因为旧的服务器可能会有内存泄漏。另外,既然你说你运营一个网站,那么你很可能运行的是 apache。尝试切换到 nginx(推荐)或 lighttpd。众所周知,Apache 会消耗资源,因此更轻量的 Web 服务器可能会有很大帮助。
如果您的 Web 应用程序可以,请尝试使用 SQLite 而不是 MySQL。它要轻量得多。最后,(显然 Godaddy 使用 OpenVZ),您的 VPS 很有可能超卖,主机节点内存不足。我知道您说您不能切换,但如果有机会,请寻找 KVM 或 Xen。DigitalOcean 是一家非常优秀的 KVM 提供商,价格非常实惠。Linode 使用 Xen,也很棒。