0 0

JVM高人看看这个配置是什么问题导致内存持续增长5

  

有哪位JVM的高人能否看看我们系统下面的jvm的内存情况,到底是哪方面的问题,这个是属于正常还是不正常。非常感谢高人的指点。目前发现产品内存在持续增长。

jvm的参数配置如下:
JAVA_OPTS="-Xmx10500M -Xms10500M -Xmn600M -XX:PermSize=800M -XX:MaxPermSize=800M -Xss512K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:/opt/itms/log/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/itms/log -Djava.util.logging.config.file=itmscpelog.properties


下面是从服务器打印的gc的log信息。

Pool: Code Cache (Non-heap memory)

        Peak Usage : init:2555904, used:16878720, committed:17104896, max:50331648
        Current Usage : init:2555904, used:16843904, committed:17104896, max:50331648


            |----------------------| committed:16.31Mb
            +---------------------------------------------------------------------+
            |//////////////////////| | max:48Mb
            +---------------------------------------------------------------------+
            |----------------------| used:16.06Mb


    Pool: Par Eden Space (Heap memory)

        Peak Usage : init:209715200, used:209715200, committed:209715200, max:209715200
        Current Usage : init:209715200, used:71397896, committed:209715200, max:209715200


            |---------------------------------------------------------------------| committed:200Mb
            +---------------------------------------------------------------------+
            |/////////////////////// | max:200Mb
            +---------------------------------------------------------------------+
            |----------------------| used:68.09Mb


    Pool: Par Survivor Space (Heap memory)

        Peak Usage : init:209715200, used:198330768, committed:209715200, max:209715200
        Current Usage : init:209715200, used:40336592, committed:209715200, max:209715200


            |---------------------------------------------------------------------| committed:200Mb
            +---------------------------------------------------------------------+
            |///////////// | max:200Mb
            +---------------------------------------------------------------------+
            |------------| used:38.47Mb


    Pool: CMS Old Gen (Heap memory)

        Peak Usage : init:10380902400, used:7663071136, committed:10380902400, max:10380902400
        Current Usage : init:10380902400, used:7663071136, committed:10380902400, max:10380902400


            |---------------------------------------------------------------------| committed:9.67Gb
            +---------------------------------------------------------------------+
            |/////////////////////////////////////////////////// | max:9.67Gb
            +---------------------------------------------------------------------+
            |--------------------------------------------------| used:7.14Gb


    Pool: CMS Perm Gen (Non-heap memory)

        Peak Usage : init:838860800, used:110594064, committed:838860800, max:838860800
        Current Usage : init:838860800, used:110594064, committed:838860800, max:838860800


            |---------------------------------------------------------------------| committed:800Mb
            +---------------------------------------------------------------------+
            |///////// | max:800Mb
            +---------------------------------------------------------------------+
            |--------| used:105.47Mb


2012年11月23日 23:01

2个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

shengchuan1949:我用jmap确实发现了大对象,但这种对象好像是没有办法避免的,其中的就是HashMap对象,理论上将即便我大量使用了HashMap,虽然是强引用对象,但按道理在该方法退出时,该对象就会被回收。所以不太明白为什么垃圾回收器没有尽快的回收这些大对象。 另外,由于我们是一个并发量非常大的系统,在每个servlet创建了另一个线程A,在线程A中大量使用了HashMap,我在想是否是这个线程A没有被回收所引起的? 2 小时前


奇怪,这里怎么显示你回复的??

你参数里设置两种gc方式,后一个并行gc可能会覆盖前一个并发gc吧,没试过

并行gc时,可以设置-XX:PretenureSizeThreshold来设置多大的对象直接进入老年代(单位字节) 来设置对象多大时可以直接进入年老代,你把这个值调大点,则可以保证大部分对象不会直接进入年老代,年老代的对象gc通常慢,一般内存不满时不会gc的
所有你的大对象一直都在,不会回收
(-XX:MaxTenuringThreshold 默认15) 这个值也可以调调,这个表示在新生代折腾多少次后进入年老代,


gc主要在新生代,你的总共内存都成10G了,把你的新生代的参数再调大点吧-Xmn600M ,-XX:SurvivorRatio=1这个比例值最好也调一下

2012年11月24日 12:28
0 0

Pool: CMS Old Gen (Heap memory)

        Peak Usage : init:10380902400, used:7663071136, committed:10380902400, max:10380902400
        Current Usage : init:10380902400, used:7663071136, committed:10380902400, max:10380902400


            |---------------------------------------------------------------------| committed:9.67Gb
            +---------------------------------------------------------------------+
            |/////////////////////////////////////////////////// | max:9.67Gb
            +---------------------------------------------------------------------+
            |--------------------------------------------------| used:7.14Gb

年老代慢慢多了
可能new大对象了,jmap查内存对象大小定位具体对象吧

2012年11月24日 00:19

相关推荐

    JVM内存配置优化

    ### JVM内存配置优化 #### 一、理解JVM内存模型 在进行JVM内存配置优化之前,我们需要了解Java虚拟机(JVM)的内存结构。Java的逻辑内存模型大致分为几个部分: 1. **堆内存(Heap)**:主要用于存储对象实例、数组...

    JVM内存溢出问题解析

    JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...

    JVM内存参数详解以及配置调优

    在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、垃圾回收、堆和非堆内存、内存分配和限制等方面。 JVM 结构 JVM 的结构主要由六个部分组成:JVM API、JVM 内部组件、平台...

    tomcat6.0 修改启动内存设置 java jvm参数配置

    这不仅可以提升应用程序的性能,还能有效避免因内存不足而导致的应用崩溃或性能下降等问题。本文将详细介绍如何在 Tomcat 6.0 中修改启动内存设置以及配置 Java 虚拟机 (JVM) 的相关参数。 #### 二、JVM 内存参数...

    JVM 内存结构及配置总结

    Java虚拟机(JVM)内存结构与配置是Java开发者必须理解的重要概念,它涉及到程序的运行效率和稳定性。本文将详细解析JVM的内存结构、内存分配策略以及相关的配置参数。 1. **JVM内存结构** JVM内存主要分为以下几...

    jvm 配置jvm参数

    合理配置JVM参数不仅可以显著提升应用程序的运行效率,还能避免因内存溢出等问题导致的系统崩溃。本文将深入探讨JVM参数配置的关键点,帮助读者掌握如何根据具体需求调整JVM,以达到最佳性能。 #### 二、JVM参数...

    如何配置Tomcat的JVM虚拟机内存大小

    ### 如何配置Tomcat的JVM虚拟机内存大小:深入解析与最佳实践 #### 引言 在IT领域,特别是Web应用服务器管理中,正确配置Java虚拟机(JVM)的内存大小对于确保应用程序的稳定性和性能至关重要。本文将详细探讨如何...

    JVM内存空间分配笔记

    ### JVM内存空间分配详解 #### 一、JVM内存模型概览 ...综上所述,理解JVM内存分配机制对于Java开发者来说至关重要,这不仅有助于编写高效、稳定的代码,还能在遇到性能瓶颈时快速定位问题并进行优化。

    jvm内存监控工具使用

    jstat 是一个用于监视 JVM 内存使用情况的强大工具,它可以提供有关堆内存、非堆内存、类加载和垃圾收集器活动的详细信息。通过 jstat,你可以监控 JVM 各个区域的内存使用率,包括年轻代、老年代和永久代,这对于...

    JVM内存管理白皮书

    在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...

    深入详解JVM内存模型与JVM参数详细配置.pdf

    "深入详解JVM内存模型与JVM参数详细配置" 本资源详细介绍了JVM内存模型的结构和组成部分,包括堆内存、方法区、栈内存、程序计数器等。同时,还详细介绍了JVM参数的配置和调整方法,以提高JVM的性能和效率。 ...

    jvm 内存分析文档

    这部分在JVM规范中被称为“非堆”(Non-Heap),在Java 8及以后版本,这部分被合并到堆内存中,称为元空间(Metaspace)。 - **本地方法栈(Native Method Stack)**:与JVM栈类似,但服务于本地方法(如C++方法)...

    tomcat修改JVM内存配置(解决大项目内存溢出问题有效方案)

    tomcat修改JVM内存配置(解决大项目内存溢出问题有效方案)

    idea插件JVM内存工具JProfiler11

    IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...

    jvm内存分析工具mat

    在JVM内存管理中,内存泄漏是一种常见的性能问题,可能导致应用运行缓慢,甚至崩溃。MAT通过解析JVM生成的hprof文件(内存快照),可以深入分析堆内存的各个部分,包括对象分配、存活状态、引用关系等,帮助定位问题...

    JVM内存日志

    `jmap`是Java的一个命令行工具,用于获取堆内存的详细信息,包括堆dump,这对于分析JVM内存状态非常有用。 本文将深入探讨JVM内存结构、`jmap`工具的使用以及如何分析`dump.txt`文件中的内存日志。 1. JVM内存结构...

    JVM 深入学习教程深入分析JVM教程!jvm 内存原型,优化等等

    1. 内存泄漏:无用对象未被正确释放,占用内存持续增长。可通过内存分析工具找出泄漏源。 2. 常见泄漏原因:静态集合类引用对象,单例模式未正确处理,长生命周期对象持有短生命周期对象等。 六、类加载机制 1. ...

    JVM内存模型

    JVM内存模型是Java虚拟机(JVM)中的一种内存管理机制,它将内存区分为永久区内存(Permanent space)和堆内存(heap space)两大块。永久区内存用于存放加载的Class类级对象,如class本身、method、field等等,而堆...

Global site tag (gtag.js) - Google Analytics