Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标。
吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序。
CMS吞吐调优
CMS包括Minor GC所带来的开销应该小于10%,如果垃圾收集的开销在3%或更少,说明通过调优吞吐量,提升性能的空间就极其有限了。
可用的调优方法如下:
1. 增大新生代空间,以降低Minor GC频率,减少CPU周期占用;
2. 增加老年代空间,以降低CMS频率,并可以减少老年代内存碎片;
3. 优化CMS周期的启动条件,尽可能在较晚的时候进行;
总的来说,就是减少垃圾收集占用的CPU周期。
ParallelGC吞吐调优
这里说的ParallelGC是指开启了下面两个JVM参数
-XX:+UseParallelGC
-XX:+UseParallelOldGC
对ParallelGC调优的目标是尽可能避免发生Full GC,这就需要优化对象老化频率,可以调整Survivor空间实现对对象老化的优化。
使用ParallelGC时,垃圾收集的开销应小于5%,如果已经减少到1%甚至更少,那基本上就已经达到了极限。
Survivor调优
ParallelGC默认可以自动调整Survivor空间,大部分应用用自动调整已经可以,对要求比较高的应用就需要关闭自动调整,进行手动调整。
为JVM添加下面两个参数,只针对ParallelGC有用:
- -XX:-UseAdaptiveSizePolicy //关闭自适应调整
- -XX:+PrintAdaptiveSizePolicy //打印详细Survivor空间占用日志
如下面日志:
- 2016-12-11T16:44:03.653+0800: 5.042: [GC (Allocation Failure) AdaptiveSizePolicy::update_averages:
- survived: 10464720
- promoted: 1096456
- overflow: true
survived:“TO”Survivor空间占用大小;
promoted: 新生代提升至老年代的对象大小;
overflow:是否有Survivor空间的对象溢出到老年代;
从上面的日志可以看出,Minor GC后新生代存活对象大小10M,因为没有设置-XX:TargetSurvivorRatio,默认Survivor空间占用比率为50%,
所以Survivor空间应为20M。
找到稳定态下Full GC之间所有Minor GC中最大的存活对象大小,然后就可以调整Survivor空间大小。
原JVM参数如下:
- -Xmx1024m –Xms1024m –Xmn50m -XX:SurvivorRatio=3
可以计算出:原Survivor空间:10M,原Eden空间:30M
现在增大Survivor空间到20M
保证Eden空间不变,则新生代大小为70M;
70M / (SurvivorRatio + 2)=20M,所以SurvivorRatio=1.5
保证老年代空间不变,则Java堆大小调整为1044M
所以最后JVM参数为:
- -Xmx1044m -Xms1044m -Xmn70m -XX:SurvivorRatio=1.5
如果Java堆大小已经不能再增大,可以计算下Minor GC后,存活对象的最小值、最大值、平均值,如果不存在大幅波动,
可以尝试提高Survivor空间的占用百分比-XX:TargetSurvivorRatio=<n>,其默认为50%。
并行线程调优
-XX:ParallelGCThreads
并行垃圾收集器的线程数,建议收集线程数设置的小于默认值,否则大量GC线程会影响应用性能
其他性能命令行选项
-XX:+AggressiveOpts | 自动优化,但有可能不太稳定 |
-XX:+DoEscapeAnalysis | 逃逸分析 |
-XX:+UseBiasedLocking | 偏向锁 |
-XX:+UseLargePages | 大页面支持 |
Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量的更多相关文章
- Java性能优化权威指南-读书笔记(四)-JVM性能调优-延迟
延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应 ...
- Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述
概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...
- Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具
一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间 ...
- Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用
新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...
- [原创]Java性能优化权威指南读书思维导图
[原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt Binu John 译者: 柳飞 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4
- [原创]Java性能优化权威指南读书思维导图3
[原创]Java性能优化权威指南读书思维导图3
- [原创]Java性能优化权威指南读书思维导图2
[原创]Java性能优化权威指南读书思维导图2
- 读书笔记系列之java性能优化权威指南 一 第一章
主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...
随机推荐
- SPOJ Pouring Water
传送门 POUR1 - Pouring water #gcd #recursion Given two vessels, one of which can accommodate a litres o ...
- 轻量级应用开发之(02)UIView
一 控件 1.屏幕上的所有UI元素都叫做控件(也有叫做视图.组件)比如按钮(UIButton).文本(UILabel)都是控件. 2.控件的共同属性有哪些? 尺寸,位置,背景色 3. 苹果将控件的共同 ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- python 与 mysql
1.开发环境: 1)CLion-2016.1.3 C/C++ 与 Python 混合编程 IDE,先安装好以下 2) 3) 编译器再关联 2)tdm-gcc-4.8.1-3 C/C++ 编译器 3)W ...
- 关于使用客户端控件和jquery上传文件
一.导入Jquery插件ajaxfileupload.js 下载地址:http://www.phpletter.com/Demo/AjaxFileUpload-Demo/ 使用方法: $.ajaxFi ...
- SQLServer 删除所有表的外键约束
)) begin exec(@c1) fetch next from c1 into @c1 endclose c1deallocate c1
- AppCompat学习(1)-AppCompatSpinner
andriod中的spinner控件一共有两个,一个是本身的Spinner,一个是android.support.v7.widget.AppCompatSpinner. 两者的区别在于v7内的Spin ...
- php中array_flip数组翻转
array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失. 如果原数组中的值的数据类型不是字符串或整数,函数将报错. Return ...
- systemctl 命令的用法
对比表,以 apache / httpd 为例 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.serv ...
- javascript正则——贪婪匹配
熟悉正则的朋友都知道,正则的匹配有“贪婪”和“非贪婪”之分. “贪婪”匹配是尽可能多的匹配: 对于字符串‘aaaa’, /a+/匹配整个字符串,而非贪婪匹配/a+?/匹配的是整个字符串的第一个‘a’, ...