该服务器是否使用了过多的 RAM 或虚拟内存?(附有屏幕)

该服务器是否使用了过多的 RAM 或虚拟内存?(附有屏幕)

我有一台配备 512MB RAM、40GB 存储空间和 1CPU 的 VPS,我在其上运行一个小型域名停放服务。

它位于 CentOS、MySQL、Apache 等上。

现在我的托管提供商声称我的服务器给他们的存储系统施加了太多负载他们不得不重置我的实例,并要求我优化服务器,因为它会减慢存储上其他客户端的速度。

整个域名的文件(www 文件夹)小于 100MB!

我四处寻找,却看不出是什么原因导致了这种“存储滥用”,他们说这是写入他们存储中的虚拟内存,几百 MB。

  1. 正如 webmin 屏幕所示,这不是正常使用吗?
  2. 这是否表明附加的“top”命令存在任何问题?(例如mysqld的772MB虚拟内存)。

据我所知,唯一的过载是一个 php 脚本,它每小时运行一次来​​处理所有域统计信息,需要 3 分钟才能完成,而且似乎让 CPU 开始工作 :)

编辑:我添加了 top 命令的第二个屏幕,显示进程列表上方的丢失的数据。

Webmin 中显示的内存使用情况

top 命令输出

top 命令输出 2

答案1

这只是一个猜测,但是对于评论来说太长了,所以就这样了。

使用虚拟专用服务器,您可以获得真实服务器的“切片”。与其花费 500 美元购买 24 台小型服务器(每台服务器配备 512MB 内存等),不如购买(并运行)一台配备 12GB 内存和两个六核超线程 CPU、售价 3500 美元的服务器更便宜。

诀窍在于:该服务器可能销售超过 24 个切片。在某种程度上,这是可以的:他们并不指望每个人都一直使用他们的所有资源。如果您拥有足够多的资源,您可以分析您的客户,并悄悄地将客户转移到您确信他们不会互相干扰的配置中——至少在正常情况下不会。同样,这是正常的做法,只要小心谨慎,就没有什么问题。异常工作负载可能会导致问题,但这也是使其成为具有成本效益的选择的部分原因;如果您想要一种不可能实现这一点的服务,您需要为租用托管空间中的物理服务器等服务支付更多费用。

现在我来猜一下。如果他们过度订购服务器会发生什么?有人会处于劣势,只拥有虚拟资源。他们的“RAM”实际上完全由磁盘支持,必须来回交换。通常,这会分散到所有机器上,但在适当的情况下,其中一台机器可能会被冷落。那就是你。从他们的角度来看,你的机器在做奇怪的事情。在他们的监控工具中,你似乎是坏人,而实际上你是受害者。一个好的提供商会认识到这一点,但一个好的提供商也会告诉你他们重置了你的实例。

答案2

查看 top 命令输出中的 virt 字段。您的 VPS 有 512MB 内存,但 apache 需要的内存远远多于 4GB,这可能解释了为什么您有 4GB 的虚拟内存。有了所有这些 apache 线程,虚拟内存就会不断交换,从而导致高 IO。

为什么 apache 消耗这么多内存?首先检查 apache 日志,看看是否能发现任何异常情况。如果发现任何问题,请报告,包括示例,也许我们可以提供更具体的帮助。

可能是您用于构建统计数据的 PHP 脚本没有正确终止,但是我认为您已经将 PHP 最大执行时间设置为合理的值以防止脚本失控?

重新启动 apache,并监控内存使用情况,它需要多长时间才会开始消耗大量交换空间?根据您大约 7 小时的正常运行时间判断,时间不是很长。

我不知道您的 PHP 网站的详细信息,但我认为一个简单的域名停放网站不应该使用太多资源。我有一个在我们公司使用的 VPS,它运行一个内部开发的应用程序,带有 MySQL 后端,每天大约有 30 名员工使用它,而且它消耗的内存远不及您的那么多。

根据平均负载判断,您的 CPU 使用率相当高,但这可能只是因为正在进行交换。解决 Apache 消耗如此多内存的问题后,我相信情况会好转很多。

另外,更换你的主机,他们不应该在没有警告的情况下重置你的实例。这是不可原谅的。

答案3

您的httpd进程占用的 RAM 比您实际可用的 RAM 多,因此必须进行交换。(有趣的是,在显示此情况的屏幕截图中,您截取了顶部,并且在截取第二张屏幕截图之前重新启动了 Apache。您在隐藏什么?)您需要大幅减少系统的内存使用量,最有可能的方法是减少同时运行的httpd进程数,或者获得更多的 RAM。

话虽如此,主持人应该已经对这类事情进行速率限制,这并不太难;也许他们只是不知道怎么做?当您决定获得更多 RAM 时(您会的),也请购买一台新主机。

相关内容