相关疑难解决方法(0)

为什么堆内存使用量和加载类的数量不断增加?

我正在使用JVM Explorer- 链接到JVM资源管理器,以分析我的Spring应用程序.我有以下问题.

  • 为什么即使在应用程序启动并且还没有收到任何请求后,"使用堆内存"仍在不断增加?(图1)

  • 为什么即使在垃圾收集之后和收到任何请求之前'使用堆内存'仍在不断增加?(图像2)

  • 为什么在垃圾收集之后,通过向应用程序发送一些请求来加载类的数量正在增加?应用程序不应该使用以前的类吗?为什么它只是增加几乎所有东西(堆,加载类的数量)?(图像3)

    应用程序启动后 - 放大图像 在此输入图像描述

    单击"运行垃圾收集器"按钮后.- 放大图像

在此输入图像描述

在完成垃圾收集程序后向应用程序发送一些请求后 - 放大图像

在此输入图像描述

java memory spring profiling spring-mvc

10
推荐指数
1
解决办法
2864
查看次数

进程内存与堆 - JVM

我们在tomcat服务器上部署了一个Web应用程序.我们运行了某些预定的作业,之后堆内存达到峰值并且稳定下来,一切似乎都很好.然而,系统管理员抱怨内存使用情况(Linux上的"top")不断增加预定作业的数量.什么是堆内存和CPU内存之间的相互关系?可以通过任何JVM设置进行控制吗?我使用JConsole来监控系统.
我通过JConsole强制进行垃圾收集,并且堆使用率下降,但是Linux上的内存使用量仍然很高,并且从未降低.

任何想法或建议会有很大帮助吗?

java linux tomcat

9
推荐指数
2
解决办法
2万
查看次数

JVM 消耗的本机内存 vs java 进程总内存使用量

我有一个小型的 java 控制台应用程序,我想在内存使用方面进行优化。它在 Xmx 设置为仅 64MB 的情况下运行。根据不同的监控工具(htop、ps、pmap、Dynatrace),进程的总体内存使用情况显示值超过 250MB。我主要在 Ubuntu 18 上运行它(也在其他操作系统上进行了测试)。

我使用 -XX:NativeMemoryTracking java param 和 jcmd 的本机内存跟踪来找出为什么在堆之外使用了这么多内存。

NMT 在汇总时显示的值或多或少与 htop 作为常驻内存显示的值相同。

神经机器翻译

Total: reserved=1518873KB, committed=255877KB
Run Code Online (Sandbox Code Playgroud)

顶部

在此输入图像描述

我使用了几个 JVM 参数来减少本机内存消耗(减少堆栈大小、将 GC 更改为串行、类数据共享等)。根据 NMT(malloced 和 mmaped),保留和提交的内存指标总共下降了约 50MB。

神经机器翻译

Total: reserved=1475110KB, committed=209218KB
Run Code Online (Sandbox Code Playgroud)

我使用的所有工具(htop、ps、pmap、Dynatrace)都没有显示任何差异。该进程使用的总内存仍然是 250MB。

  1. 问题是,这是为什么呢?为什么减少 JVM 的本机内存使用量不会对 java 进程使用的常驻内存产生任何影响?它是否预先以某种方式保留并且未释放?
  2. 有没有其他方法可以有效减少整个java进程的内存消耗(在已经优化并设置为仅64MB的堆之外)?

java memory operating-system jvm

6
推荐指数
1
解决办法
2470
查看次数

标签 统计

java ×3

memory ×2

jvm ×1

linux ×1

operating-system ×1

profiling ×1

spring ×1

spring-mvc ×1

tomcat ×1