我看到我的一些服务因“分配内存错误”或“无法创建新进程”等错误而遭受/崩溃。
我对此有点困惑,因为日志显示当时系统有大量可用内存(在一种情况下约为 26GB)可用内存,并且没有以任何其他方式特别强调。
在注意到带有类似错误的 JVM 崩溃并添加了“交换空间不足?”的查询之后。它让我更深入地挖掘。
事实证明,有人为我们的区域配置了一个 2GB 的交换文件。我们的区域没有内存上限,目前可以根据需要访问 128GB 的 RAM。我们的 SA 计划在有机会时将其上限设置为 32GB。
我目前的想法是,虽然有足够的内存供操作系统分配,但交换空间似乎严重不足(基于此处的其他答案)。似乎 Solaris 想要确保有足够的交换空间以防万一必须换出(即它正在保留交换空间)。
这种想法是正确的,还是有其他原因导致我在大量可用内存和看似过小的交换空间时出现内存分配错误?
与其他一些实现令人讨厌的内存不足杀手或等效的操作系统不同,Solaris 不会过度使用内存(除非您使用非常特定的分配技术)。当进行常规内存分配时,操作系统会确保该内存在需要时可用(即预留)。缺点是您需要有足够的虚拟内存空间来存储这个可能部分未使用的内存。
可用 RAM 无关紧要,但它也占虚拟内存大小。
出现问题时查看“swap -s”输出。
请注意,您可以通过添加交换文件或设备轻松增加交换区域。