我有一个1GB RAM的Parallels VPS。 好吧,主机说它有1GB,但我不能检查它是“免费的”和其他类似的命令返回13Gb,我猜是物理内存的大小。
当我执行顶部命令,我看到以下输出: 
正如您所看到的,mysql是一个使用大量内存(143M)的进程。 而使用RAM的总大小约为160M。 问题是我不能使用更多的内存:如果我扩展了一些更多的设置(例如,对于MySQL),我得到“没有足够的内存”,“不能分配内存”等。
我有两个猜测:
任何其他的想法如何我可以使用更多的内存为MySQL(我想使用1Gb的80%左右)?
你有一个Virtuozzo(或OpenVZ)VPS–对于这个VPS,正常的内存分配规则不适用。 假设你的托pipe服务提供商不是在骗你,你拥有1GB的内存,只要OpenVZ的“hypervisor”可以让你分配1GB的内存,或者根据你对事件的描述,记忆。
仅仅因为你没有看到任何交换,这并不意味着你的所有数据都在物理内存中 – OpenVZ的规则是不同的(非常非常不同)。
如果你想为MySQL使用更多的内存,那么你将不得不减less虚拟机中其他内容的使用量。 你最高的输出结果并没有列出任何明显的竞争者,但是如果你按照内存的使用情况对它进行sorting,你会更清楚什么是多余的(并且会给你带来最好的结果)。
另外,我build议远离当前的托pipe服务提供商 – 而OpenVZ已经有了它,那个地方不在VPS托pipe市场。 你可能select他们是因为他们是一个便宜的提供者,但你正在学习为什么他们便宜 – OpenVZ是一个非常有限的平台,它有自己奇特的怪癖。 用“真正的”VPS(有人使用Xen,KVM,VMWare等)的供应商,你会更好。
除了已经说过的之外,您可能还想检查/ proc / user_beancounters ,它包含有关VPS资源消耗的信息。
我还发现有一种方法可以通过限制默认的堆栈大小来减less虚拟内存的大小。 我会推荐这篇文章和这个论坛post。