jvm内存设置及总结

http://dmouse.iteye.com/blog/1264118
jvm内存设置及总结

博客分类: java相关

Application情况:
大量使用了内存缓存,应用负载量较大,900w/d-1000w/d,对响应速度要求较高,因此gc造成的应用中断现象需要尽量控制在最小范围内。

系统情况:
2个8核的cpu,共2*8=16的处理器(processor),总大小为16G的内存。

调优方式:
1、-Xms -Xmx
设置初始堆最大和最小内存;经过测试,目前tomcat容器可以设置的最大内存为3G
-Xms3072M -Xmx3072M,避免gc后jvm重新分配内存,影响性能

2、-Xmn
设置年轻带Young Gen的内存大小,sun官方推荐Young Gen为整个堆内存的3/8,设置过小的Young Gen,会导致minor collection过于频繁,虽然提高了系统吞吐,确也提高了应用中断次数和时间,对于需要快速响应的服务而言不太适合,因此提高Young Gen是提升性能很关键的一步。
-Xmn1024M

3、设置collector
collector为垃圾收集器,目前主要有三种,serial collector(串行收集器)、parallel collector(并行收集器)、concurrent collector(并发收集器)
JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

parallel collector(并行收集器):以thoughout吞吐量为目标
concurrent collector(并发收集器):以响应时间为目标,尽量减小gc造成的应用中断,以牺牲CPU为代价,提高了CPU的使用率

-Xms3g -Xmx3g -Xmn1g -XX:PermSize=128M -XX:+PrintGCDetails -XX:+UseParNewGC -XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC

4、failed
promotion failed
参考http://blogs.oracle.com/jonthecollector/entry/when_the_sum_of_the
concurrent mode failure
参考 http://blogs.oracle.com/jonthecollector/entry/what_the_heck_s_a
jvm调整成如上参数后,似乎gc的时间短了,中断的次数和时间也大大提升,但是意外的发现了几次如下的错误
Java代码 收藏代码
[GC [ParNew (promotion failed): 839835K->840090K(943744K), 0.2078800 secs][CMS[Unloading class sun.reflect.GeneratedMethodAccessor661]
[GC [ParNew (promotion failed): 843545K->843165K(943744K), 0.4597140 secs][CMS[Unloading class sun.reflect.GeneratedMethodAccessor1018]

[GC [ParNew (promotion failed): 841739K->840457K(943744K), 0.2063630 secs][CMS[CMS-concurrent-sweep: 3.139/3.521 secs] [Times: user=10.76 sys=0.57, real=3.52 secs]
(concurrent mode failure)[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1790]

promotion failed和concurrent mode failure都会造成应用程序的中断,即所谓的stop-the-world。

a)产生上述问题的原因,原文是这样描述的(if theconcurrent collector is unable to finish reclaiming the unreachable objectsbefore the tenured generation fills up, or if an allocation cannot be satisfiedwith the available free space blocks in the tenured generation, then theapplication is paused and the collection is completed with all the applicationthreads stopped),简单解释就是old gen剩余的内存不足以满足来自于young gen的垃圾回收,导致jvm通过卸载已经生成的反射类来释放足够的内存。这种现象会造成应用较长时间的中断,从而影响性能。所以理论上应该保证eden + from survivor jvm内存设置及总结

时间: 2025-01-02 01:33:11

jvm内存设置及总结的相关文章

全面认识Eclipse中JVM内存设置(转)

这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方法区.JVM内部处理或优化所需的内存(如JIT编译后的代码缓存).每个类结构(如运行时常数池.字段和方法数据)以及方法和构造方法的代码都在非堆内存中. Eclipse中JVM内存设置 eclipse.ini内存设置 -vmargs-Xms128M-Xmx512M-XX:PermSize=64M-XX:Max

JVM内存设置

一.JVM内存的设置的原理 默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError. -Xms   Java Heap初始值,-Xms和-Xmx设为相同值,避免垃圾回收后内存重新分配 -Xmx  Java Heap最大值,默认值为物理内存的1/4 -Xmn    Java Heap Young区大小 -Xss    每个线程的Stack大小 二.JVM内存分配设置 2. 如何设置JVM的内存分配: (1)当在命令提示符下启动并

JVM内存设置多大合适?Xmx和Xmn如何设置?

JVM内存设置多大合适?Xmx和Xmn如何设置? 问题:新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置呢?设置成多大比较合适,既不浪费内存,又不影响性能呢? 分析:依据的原则是根据Java Performance里面的推荐公式来进行设置. 296d1509689688.png 具体来讲:Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍永久代 PermSize和MaxPermSize设置为老年代存活

JVM 内存设置

jvm参数设置:1. -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:-PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+PrintHeapAtGC2. -agentlib:hprof(按Ctrl+C生成 java.hprof.txt)一般写为-Xloggc:gc.log-XX:+PrintGCTimeStamps-XX:-PrintGCDetails-XX:+UseConcMarkSweepGC-agentlib:hpr

(转)Linux下tomcat JVM内存设置步骤

java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space --------------------------------------------------------- 这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理. 一.java.lang.OutOfMemoryError: PermGen space PermGen space的全称

由MyEclipse内存不足谈谈JVM内存设置

转自:http://www.javatang.com/archives/2007/12/03/1653250.html 如果没有进行设置的话,在使用MyEclipse的经常出现如下图所示内存不足的提示. 提示中说的很明白:“MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains.”意思是说当前只有小于5%的非堆内存是空闲的.所以我们只要将这个值设置大一些就可以

JVM 内存设置大小(Xms Xmx PermSize MaxPermSize 区别)

Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase this memory.   Failure

JVM(java 虚拟机)内存设置

一.设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定: -Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值: -Xmn   Java Heap Young区大小,不熟悉最好保留默认值: -Xss   每个线程的Stack大小,不熟悉最好保留默认值: 2. 如何设置JVM内存分配: (1)当在命令提

Java虚拟机(JVM)中的内存设置详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步. PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance. GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很