当前位置: 首页 > 知识库问答 >
问题:

刷新JVM内存和交换

闻人业
2023-03-14

虚拟机:

4CPU 10GB RAM 10GB交换

Java1.7-Xms=-Xmx=6144m

Tomcat 7

我们观察到JVM有一种非常奇怪的行为。JVm驻留内存开始收缩,交换使用率飙升至50%以上。

请参阅下面来自监控工具的统计数据。

http://i44.tinypic.com/206n6sp.jpg http://i44.tinypic.com/m99hl0.jpg

任何能理解这一点的人都非常感激。

谢谢!

共有2个答案

郭鸿信
2023-03-14

感谢您的回复。是的,这比Java更接近于系统故障排除,但我认为这是启动这个主题的合适论坛,以防任何人在JVM中看到这样的现象。

无论如何,我已经检查了顶部,没有什么进程比Java更需要内存。实际上,第二个顶级进程利用了72MB(RSS)。

不,交换性在这个系统上不是激进的设置,但默认为60。我没有分享的另一个信息是,集群中有4个应用服务器,所有服务器都在同一时间显示了这种行为。好吧,JVM不会换掉,但操作系统会换掉。但这一切都让我困惑。

所有这些应用服务器都是生产和繁忙的服务请求,所以没有空闲。使用的堆大小为6GB中使用的平均5GB。

我发现的另一件有趣的事情是Vmware日志中同时出现了一些失败的消息,这就是我正在调查的。

石喜
2023-03-14

或者你的Java程序是空闲的,它不需要内存,你有很高的可交换性?在这种情况下,你的操作系统会释放内存以防万一,只留下用过的部分。

在我看来,这实际上是一种良好的行为,为什么要为不使用它的进程浪费RAM呢?

除非您在VM上只运行这一个进程,否则最好将交换性设置为0或其他较小的数字-此内存被分配给这个进程,因此我们可能会禁用交换。

 类似资料:
  • 我使用的是64位Linux和Java JVM。我想确认JVM使用的内存是否小于机器的物理内存大小,操作系统是否不会交换磁盘内存?

  • 我有这些jvm参数集

  • 我的应用程序的写入吞吐量很低,我可以管理2-3分钟的更改,以反映在solr搜索结果中 目前,我通过索引应用程序进行提交(在每批文档之后),并在solr端配置了以下内容: 选择配置的原因来自我对以下内容的理解: 我的应用程序被大量读取需要大量缓存,我负担不起刷新缓存的费用。因此,我已经完全禁用了软提交。 我已经禁用了opensearch cher,因为如果我不这样做,它会使不可取的顶级缓存无效 在生

  • 我们有一个具有以下参数的tomcat Xms 1g Xmx 4g并行GC,它安装在带有JVM 1.8.181的Ubuntu机器上 最近GC正在全速启动,并且不让任何其他进程继续。我不明白的是,当总JVM只有2.8 GB而最大堆可以达到4GB时,就会发生这种情况。为什么当内存没有达到最大值时,全GC会运行? 当我深入挖掘时,我发现在使用和promise的记忆中有一个突然的变化;从1 GB到约4GB。

  • 我假设InitialRAMPercentage设置启动时堆的数量,MinRAMPercentage和MaxRAMPercentage设置JVM允许收缩/增长到的堆的底部和顶部限制。 显然情况并非如此。当我启动一个JVM(使用UseContainerSupport,具有这些新的内存设置参数)时,如下所示: InitialHeap和MaxHeap设置后,我无法找到“最小堆大小”值;因此,MinramP