为什么我在Solaris 10中仍然有大量的可用内存时遇到与交换空间相关的错误?

我看到我的一些服务正在遭受“错误分配内存”或“无法创build新进程”等错误。

由于日志显示当时系统有大量的可用内存(大约26GB),所以我对此略有困惑,并且没有特别强调任何其他方式。

在添加“Out of swap space?”查询后发现类似错误的JVM崩溃之后? 这让我深入一点。

事实certificate,有人用2GB的交换文件configuration了我们的区域。 我们的区域没有内存限制,目前可以访问它所需的128GB内存。 我们的SA正在计划在32GB的时候将其限制在有机会。

我目前的想法是,虽然有足够的内存分配的操作系统,交换空间似乎严重不足(基于这里的其他答案)。 看起来Solaris似乎想要确保有足够的交换空间以防万一需要交换(即保留交换空间)。

这是正确的想法还是有一些其他的原因,我得到内存分配错误与这么大的内存空间和看似不足的交换空间?

与其他一些实现令人讨厌的内存不足的杀手级别或其他操作系统不同,Solaris不会过度使用内存(除非使用非常具体的分配技术)。 当进行正常的内存分配时,操作系统确保在需要的时候这个内存可用(例如预留)。 缺点是你需要有足够的虚拟内存空间来存储这个可能部分未被使用的内存。

可用内存不相关,但它也占用虚拟内存大小。

发生问题时,请查看“swap -s”输出。

请注意,您可以通过添加交换文件或设备轻松地增加交换区域。