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内存设置及总结的更多相关文章
- 全面认识Eclipse中JVM内存设置(转)
这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方法区.J ...
- JVM内存设置多大合适?Xmx和Xmn如何设置?
JVM内存设置多大合适?Xmx和Xmn如何设置? 问题:新上线一个java服务,或者是RPC或者是WEB站点, 内存的设置该怎么设置呢?设置成多大比较合适,既不浪费内存,又不影响性能呢? 分析:依 ...
- (转)Linux下tomcat JVM内存设置步骤
java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space -------------- ...
- 由MyEclipse内存不足谈谈JVM内存设置
转自:http://www.javatang.com/archives/2007/12/03/1653250.html 如果没有进行设置的话,在使用MyEclipse的经常出现如下图所示内存不足的提示 ...
- JVM 内存设置大小(Xms Xmx PermSize MaxPermSize 区别)
Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...
- 容器环境的JVM内存设置最佳实践
Docker和K8S的兴起,很多服务已经运行在容器环境,对于java程序,JVM设置是一个重要的环节.这里总结下我们项目里的最佳实践. Java Heap基础知识 默认情况下,jvm自动分配的heap ...
- jvm内存设置
JVM有很多个内存管理命令,总体而言,分为两类: 1.-X开头的管理命令:这些选项在JDK升级时不会通知修改: 2.-XX开头的管理命令:这些选项不够稳定,所以建议少用. JVM参数的含义: 参数名称 ...
- elasticsearch 2.4 windows版jvm内存设置
本文编写目的是因为网上有很多es修改内存配置的文章,方法也各有不同,但在我的情况下(es 2.4 windows版)发现很多方法都是无效的,有效只有以下方法 第一个是xms,第二个是xmx
- 如何设置jvm内存
本文向大家简单介绍一下进行JVM内存设置几种方法,安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JR ...
随机推荐
- 安卓OpenGL入门
1.先用一个GLSurfaceView作为画布,然后自定义一个Renderer继承自Renderer,把这个自定义的Renderer通过setRenderer()设置给GLSurfaceView就可以 ...
- Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:
Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法: ------------------------------------------------------------ ...
- 快速玩转Apple Pay开发
快速玩转Apple Pay开发 更新时间:2016年02月20日09时25分 来源:传智播客 Apple Pay 2016年2月18日上午,苹果公司宣布,与中国银联达成合作,正式在中国大陆上线Appl ...
- 源码篇:SDWebImage
攀登,一步一个脚印,方能知其乐 源码篇:SDWebImage 源码来源:https://github.com/rs/SDWebImage 版本: 3.7 SDWebImage是一个开源的第三方库,它提 ...
- C++ 学习之函数重载、基于const的重载
函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载.注意函数重载不能基于不同的返回值类型进行重载. 注意函数重载中的"形参表"不 ...
- 获取Excel数据(或部分数据)并导出成txt文本格式
运行代码前先导入jxl架包,以下代码仅供参考: 测试excel文件(我要获取该excel的内容为省.县.乡.村.组和PH的值): ExcelTest01类代码如下: // 读取Excel的类 impo ...
- Converting between IEEE 754 and Float (Format related
The float can be converted to well known single-precision IEEE 754 number, why 754? It's the standar ...
- POJ 1470 Closest Common Ancestors(LCA 最近公共祖先)
其实这是一个裸求LCA的题目,我使用的是离线的Tarjan算法,但是这个题的AC对于我来说却很坎坷……首先是RE,我立马想到数组开小了,然后扩大了数组,MLE了……接着把数组调整适当大小,又交了一发, ...
- [原创] web_custom_request 与 Viewstate
在用loadrunner对.net编写的website进行性能测试时,经常会遇上一些hidden fields,例如,CSRFTOKEN.VIEWSTATE.EVENTVALIDATION等,而对于这 ...
- CodeForces 678C Joty and Chocolate
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...