我们目前面临一个问题,即我们的主机内存不足。 这些主机上只运行一个应用程序。
我们首先怀疑是 JVM 导致了问题,并检查了实际的内存使用情况。 JVM 运行良好,我们几乎 100% 确定没有内存泄漏(显示可用和已用内存的内存图看起来非常好,很明显,当 GC 启动时,平均内存使用率在很长一段时间内保持稳定).
尽管如此,主机上的空闲内存在缓慢但稳定地减少,但没有表明是什么进程在消耗它,主机上运行的每个其他服务和守护进程都有稳定的内存使用。
我们仍然假设我们的应用程序中的某些东西导致了这种情况,但是由于 JVM 看起来很好并且我们对可能的内存泄漏的审查没有显示任何漏洞,我们现在有点卡住了......
有什么想法吗?
非常感谢您提供的任何提示也请看!
最佳答案
随着时间的推移,内存被使用的最常见原因是文件缓存拥有越来越多的文件被访问。这不是问题,因为它是一个读取缓存,操作系统可以随时轻松删除内存。
例如
$ head -5 /proc/meminfo
MemTotal: 131751016 kB
MemFree: 109487136 kB
MemAvailable: 124110416 kB
Buffers: 78400 kB
Cached: 14764024 kB
这台机器有足够的可用内存。但是如果我访问大量数据。
$ find /opt -print | xargs wc -l
$ head -5 /proc/meminfo
MemTotal: 131751016 kB
MemFree: 105404804 kB
MemAvailable: 124107668 kB
Buffers: 78400 kB
Cached: 18824784 kB
现在,由于文件被缓存,可用内存减少了 4 GB。
它们缓存了多长时间?直到
- 有理由回收内存
- 计算机重新启动
- 驱动器已卸载。
简而言之,JVM 可能正在访问文件并将它们拉入缓存,但这并不意味着这是一个问题。
顺便说一句,服务器的夜间备份通常会填满文件缓存,但这是正常的。
关于linux - 主机内存不足,使用稳定的JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464504/