linux - 主机内存不足,使用稳定的JVM

标签 linux memory jvm

我们目前面临一个问题,即我们的主机内存不足。 这些主机上只运行一个应用程序。

我们首先怀疑是 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/

相关文章:

android - 更新 VM 选项后无法在 mac 上启动 Android studio

java - JIT/Hotspot 技术书籍

linux - 有没有办法在 bash 中执行 Linux ifup 或 ifdown 而不必总是先输入 sudo?

php - 顺序连续执行php脚本

c++ - 指针和引用问题

python - "Out of Memory" Mechanize 错误

Linux 内核在堆溢出或堆栈溢出时的行为

linux - Mac OS X 是 POSIX 操作系统吗?

c++ - 函数变量到哪里去了?

java - Java线程数量随时间增长的原因