我在其中一项云服务的支持下正在进行持续的讨论。问题是我们收到“无法分配内存”错误(由 PostgreSQL 分配共享内存段),尽管它们的“可用内存”和“可用交换”指标显示大量可用内存。
支持人员声称这是因为共享/缓冲区内存(IO 缓存)处于“活动状态,因此无法直接释放”,并且内存从缓冲区到应用程序的重新分配不是即时的,并且需要一些时间时间。
据我所知,事实并非如此,因为 Linux 内核总是能够立即将 I/O 缓存中的内存重新分配给应用程序。我对吗?
答案1
不会。内存的最终释放是由操作系统完成的,这很可能需要时间。当其他事情需要时,在未来的某个随机时间,内存可能会被回收。
如果您想知道它是否会在发布时被清除,那么非常不太可能,这样做会无缘无故地需要额外的工作。如果内存包含敏感数据,您应该清理然后释放。