VMware 内存管理似乎是一个棘手的平衡行为。对于集群 RAM、资源池、VMware 的管理技术(TPS、膨胀、主机交换)、来宾内 RAM 利用率、交换、预留、共享和限制,存在很多变数。
我处于客户端使用专用 vSphere 集群资源的情况。但是,他们正在配置虚拟机,就好像它们在物理硬件上一样。反过来,这意味着标准 VM 构建可能具有 4 个 vCPU 和 16GB 或更多 RAM。我来自从小开始(1 个 vCPU,最小 RAM)的学校,检查实际使用情况并根据需要进行调整。不幸的是,许多供应商的要求和不熟悉虚拟化的人要求更多的资源而不是必要的……我对量化这个决定的影响很感兴趣。
来自“问题”集群的一些示例。
资源池摘要 - 看起来几乎 4:1 过度使用。请注意大量膨胀的 RAM。

资源分配 - 最坏情况分配列显示这些 VM 在受限条件下只能访问其配置 RAM 的 50% 以下。

上面列表中顶部 VM 的实时内存利用率图。分配了 4 个 vCPU 和 64GB RAM。它的平均使用量低于 9GB。

同一个VM的总结

在 vSphere 环境中过度使用和过度配置资源(特别是 RAM)的缺点是什么?
假设 VM 可以在更少的 RAM 中运行,是否可以说配置虚拟机具有比实际需要更多的 RAM 的开销?
什么是反驳:“如果 VM 分配了 16GB 的 RAM,但只使用了 4GB,有什么问题?? ”?例如,是否需要教育客户VM 与物理硬件不同?
应使用哪些特定指标来计量 RAM 使用量。跟踪“活动”随时间的峰值?看“消费”?
更新:我使用vCenter …
virtualization memory capacity-planning vmware-esxi vmware-vsphere
DIMM 的“等级”对服务器内存有何不同?例如,在查看服务器配置时,我看到为同一服务器提供以下内容:
2GB (1x2GB) Single Rank PC3-10600 CL9 ECC DDR3-1333 VLP RDIMM
2GB (1x2GB) Dual Rank PC3-10600 CL9 ECC DDR3-1333 VLP RDIMM
Run Code Online (Sandbox Code Playgroud)
鉴于单列与双列或双列与四列的选项总是一个:
确保在每个通道中填充具有适当数量的 DIMM 以获得最佳性能非常重要。只要有可能,建议在系统中使用双列 DIMM。双列 DIMM 提供更好的交错,因此比单列 DIMM 具有更好的性能。
例如,在 SPECjbb2005 中,装有 6 个 2GB 双列 DIMM 的系统的性能比装有 6 个 2GB 单列 DIMM 的系统高 7%。双列 DIMM 也优于四列 DIMM,因为四列 DIMM 会导致内存速度降低。
另一个重要的准则是为每个通道填充等效的等级。例如,应避免在一个通道中混合使用一个单列 DIMM 和一个双列 DIMM。
最终,内存列数的影响是特定于每个服务器/芯片组的。例如,在 IBM 的 x3850X5 服务器上,等级越高越好(参见 §3.8.4):
借助 x3850 X5 中的至强 7500/6500 …
这是我的 htop 输出:

例如,我对这个 ruby 脚本感到困惑:

它使用了多少物理内存?3+1+8+51+51? 51? 51+51?
Linux 上的 OOM 杀手时常对各种应用程序造成严重破坏,而且似乎在内核开发方面并没有真正做很多事情来改进这一点。作为设置新服务器时的最佳实践,在内存过量使用时反转默认设置,即关闭它 ( vm.overcommit_memory=2) ,除非您知道需要将其打开以用于特定用途,这不是更好吗?这些用例是什么,你知道你想要过度使用?
作为奖励,由于情况下的行为vm.overcommit_memory=2取决于vm.overcommit_ratio和交换空间,因此调整后两者的大小以便整个设置保持合理工作的良好经验法则是什么?
我目前正在使用 Joyent Accelerator 来托管我的网络应用程序,它运行良好,但是我需要降低成本,因此我正在降级我当前的计划,这施加了一些新的内存限制(256M rss,512M 交换)。昨天我并没有超过他们,但是在今天重新启动 Apache 几次之后,我现在是 411M rss,721M 交换(prstat -Z -s cpu)。
在服务器故障中搜索只给了我很多方法和特定工具来监视服务器,但没有关于如何减少/优化它的内存使用的建议。我也看过这个问题,但我认为这对这种特殊(或者我可以说是通用的?)情况不利。
服务器在共享 CPU 上运行 Solaris,我使用的是 Apache + MySQL + PHP 堆栈。
我有兴趣了解可以采取哪些步骤来解决此问题并解决问题。但是,我也没有时间在当前结束之前降低我的内存足迹并降级计划,因此也欢迎任何可以创造奇迹并挽救一天的事情:)
有一些关于 Windows 内存管理的东西,它与 TaskManager 的关系我不明白,我希望有人能启发我。
如果我正在运行虚拟机(不管是 Virtual PC 2007、Virtual Server 2005 还是 VirtualBox,因为它们的行为方式相同)并调出 TaskManager 我可以在进程选项卡上看到 VM 的一些条目,但是内存值相当小(大约 30 MB)。显然,它不包括 VM 本身实际消耗的内存。您可以显示的各种与内存相关的列都没有以不同的方式工作。性能选项卡上的内存使用情况对于包括 VM 在内的总内存使用情况似乎是正确的。
所以我的问题是为什么 VM 的内存使用量(将是 100 MB)没有显示在“进程”选项卡上?
几天前,一台内核为 2.6.32 和 128 GB 物理 RAM 的 CentOS 机器遇到了麻烦。负责的系统管理员告诉我,PHP-FPM 应用程序由于交换而不再及时响应请求,并且看到free几乎没有剩余内存,他选择重新启动机器。
我知道空闲内存在 Linux 上可能是一个令人困惑的概念,重启可能是错误的做法。但是,上述管理员指责 PHP 应用程序(我负责)并拒绝进一步调查。
我自己可以发现的是:
/proc/meminfo报告了大约 90 GB 的 Slab 内存使用量(是的,GB)。如果从那时起一直在监视系统,最值得注意的是 Slab 内存以每天约 5 GB 的速度直线增加。报告的可用内存free和/proc/meminfo以相同的速度减少。Slab 目前为 46 GB。根据slabtop大部分用于dentry条目:
空闲内存:
free -m
total used free shared buffers cached
Mem: 129048 76435 52612 0 144 7675 …Run Code Online (Sandbox Code Playgroud) 我的 IT 提供商说服我 2Rx4 和 2Rx8 RAM 之间没有区别。一点点挖掘告诉我,x4 意味着芯片上的 4 位,而 x8 意味着 8 位。哪个好,但这有什么区别?
memory ×10
centos ×2
linux ×2
windows ×2
apache-2.2 ×1
hardware ×1
htop ×1
kernel ×1
oom ×1
performance ×1
service ×1
solaris ×1
svchost ×1
swap ×1
task-manager ×1
unix ×1
vmware-esxi ×1
web-server ×1