内存使用率高 - 应用程序响应缓慢:已用内存值不减少 + 可用内存值不增加

San*_*osh 5 java memory memory-leaks out-of-memory tomcat7

当应用程序使用了几分钟,然后慢慢增加了二手内存值,降低自由内存值。几分钟后应用程序变得非常缓慢。为什么不释放内存。

系统配置 :

  • CPU : Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz (处理器数量: 4 / CPU 核心数量: 8)
  • 内存:30 GB
  • 操作系统:CentOS-7

应用配置:

  • java版本“1.8.0_171”——构建1.8.0_171-b11
  • apache-tomcat-7.0.55

Tomcat设置

在此处输入图片说明

自由 -h 命令

在此处输入图片说明

顶部命令

在此处输入图片说明

. .

二手展示12 GB的内存占用的价值和自由的内存值显示免费600 MB。我执行了多个并发用户搜索并运行jcmd命令生成 heapdump.hprof 来分析内存使用情况,并观察到 ​​heapdump 文件大小不超过 600 MB。

已用内存为 12 GB,heapdump 为 600 MB - 我不知道为什么内存没有释放或释放。

任何人都可以就如何设置/配置以提高特定硬件配置的内存使用率提出任何建议。

Mr.*_*.AF 5

您面临的问题是内存泄漏

它是什么?

在计算机科学中,内存泄漏是一种资源泄漏,当计算机程序错误地管理内存分配,导致不再需要的内存未被释放时,就会发生这种情况。

如上所述:不再需要的内存不会被释放

什么时候发生?

当在分配的堆解除分配之前,ref分配的堆被释放。ref当分配的堆被释放时,垃圾收集将无法寻址到分配的堆。换句话说,它将无法找到孤立的分配堆。

长时间运行的程序发生内存泄漏会导致什么?

该程序会消耗RAM、CPU资源

它怎么吃?

程序不断分配RAM。但是,不会取消分配它。因此,已用内存变高并导​​致运行缓慢和滞后。

它是如何固定的?

如果您使用的是Android Studio,它的智能感知功能会通过黄色突出显示来标记代码中可能存在内存泄漏的部分。如果您将鼠标悬停在突出显示上,它会弹出并显示警告,说明为什么它可能会导致问题。


Cla*_*ine 3

据我所知,您只是设置了 permSize。还要设置 -Xms 和 -Xmx,以便垃圾收集器在达到这些值时启动并清理堆内存。