我正在通过 Linux 上名为 Sisense 的应用程序构建数据模型。最近该过程因内存不足错误而失败。运行free -h
我看到当可用内存不足时发生故障,但在它实际达到零之前,即使仍有大量可用内存。
这是一个例外:
Failed to build custom table: Rule_pre; BE#521691 SQL error: SafeModeException:
Safe-Mode triggered due to memory pressure. Pod physical memory: 5.31 GB available, 2.87 GB
used, 8.19 GB total. Server physical memory: 4.86 GB available, 28.67 GB used,
33.54 GB total. Application total virtual memory: 2.54 GB. The server exceeded 85% capacity
(28.67/33.54). Possible ways to reduce memory pressure: increase server memory, adjust data
modelling (M2M, un-indexed string fields, etc.), reduce number of simultaneous queries
这是free -h
您可以在中心“空闲”列中看到内存下降的输出。一旦可用内存低于 235 MB,我就会看到上述异常。
free util 手册页对可用内存和可用内存有以下定义:
释放 未使用的内存(/proc/meminfo 中的 MemFree 和 SwapFree)
available 估计有多少内存可用于启动新应用程序,无需交换。与缓存或空闲字段提供的数据不同,该字段考虑了页面缓存,并且由于正在使用的项目,并非所有可回收的内存块都会被回收(MemAvailable in /proc/meminfo,可在内核 3.14 上使用,在内核 2.6.27+,否则与免费相同
正如我在互联网上所读到的,似乎对可用内存不足感到随意。这不是问题。但失败恰逢可用内存变低。如果我了解手册页,则可用内存用于启动新应用程序。我假设可用内存不适用于失败的现有应用程序,而可用内存确实很重要。但任何其他人的确认或额外的解释将不胜感激。我也很想知道这是否会构成内存泄漏,或者我是否应该简单地在 Linux 层以某种方式分配更多内存。