Parallels VM 中令人困惑的内存使用情况

Parallels VM 中令人困惑的内存使用情况

我有一个带有 1GB RAM 的 Parallels VPS。好吧,主机提供商说它有 1GB,但我无法将其检查为“可用”,其他类似命令返回 13Gb,我猜这是物理内存的大小。

当我执行 top 命令时,我看到以下输出: 顶部输出

如您所见,mysql 是使用大量 RAM(143M)的一个进程。并且已使用的 RAM 总量约为 160M。问题是我无法使用更多内存:如果我扩展某些设置(例如,对于 mysql),我会收到“内存不足”、“无法分配内存”等信息。

我有两个猜测:

  1. 我的 VPS 没有 1GB RAM
  2. 如果您查看虚拟内存使用情况,它更接近 1GB。但同时交换大小为零。那么我的所有虚拟内存都存储在 RAM 中吗?我预计交换大小是虚拟内存和 RAM 使用量之间的差值。

还有其他想法吗?我可以为 mysql 使用更多内存(我想使用 1Gb 的大约 80%)?

答案1

您有一个 Virtuozzo(或 OpenVZ)VPS,正常的内存分配规则不适用于它。假设您的托管服务提供商没有对您撒谎,您“拥有”1GB 的 RAM,只要 OpenVZ“虚拟机管理程序”允许您分配 1GB 的内存,或者(更有可能的是,根据您的事件描述)1GB 的虚拟的记忆。

仅仅因为你在 top 中看不到任何交换,并不意味着你的所有数据都在物理内存中——规则是不同的(非常,非常对于 OpenVZ 来说,这有所不同。

如果您想为 MySQL 使用更多内存,那么您必须减少虚拟机中其他内容使用的内存量。您的顶部输出未列出任何明显的竞争者,但如果您按内存使用情况对其进行排序,您将更好地了解哪些是多余的(并且将为您带来最大的性价比)。

另外,我建议你远离当前的托管提供商——虽然 OpenVZ 有自己的一席之地,但那一席之地并不在 VPS 托管市场。你选择他们是因为他们是一家廉价的提供商,但你正在了解他们为什么便宜——OpenVZ 是一个限制非常多的平台,有自己相当奇特的一套怪癖。你最好选择一家“真正的”VPS 提供商(使用 Xen、KVM、VMWare 等的人)。

答案2

除了已经说过的之外,你可能还想检查一下/proc/user_beancounters,其中包含有关您的 VPS 资源消耗的信息。

答案3

我还发现有一种方法可以通过限制默认堆栈大小来减少虚拟内存大小。我建议文章和论坛帖子。

相关内容