吞吐量是指,应用程序的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性能调优-吞吐量的更多相关文章

  1. Java性能优化权威指南-读书笔记(四)-JVM性能调优-延迟

    延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应 ...

  2. Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

    概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...

  3. Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具

    一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间 ...

  4. Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

    新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...

  5. [原创]Java性能优化权威指南读书思维导图

    [原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John 译者: 柳飞 ...

  6. [原创]Java性能优化权威指南读书思维导图4

    [原创]Java性能优化权威指南读书思维导图4

  7. [原创]Java性能优化权威指南读书思维导图3

    [原创]Java性能优化权威指南读书思维导图3

  8. [原创]Java性能优化权威指南读书思维导图2

    [原创]Java性能优化权威指南读书思维导图2

  9. 读书笔记系列之java性能优化权威指南 一 第一章

    主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...

随机推荐

  1. Android视频直播解决方案(rstp、udp)

    做局域网视频直播有两种方案,通过rstp或udp协议. 1.rstp协议,网络上有个开源项目,基于Android,且这个项目也是一个服务端,里面也集成了http访问页面,可以通过http或者rstp直 ...

  2. xbz分组题B 吉利数字 数位dp入门

    B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第 ...

  3. myeclipse 部署应用

    昨天把MyEclipse10给安装上了,今天想在MyEclipse下启动Tomcat并在浏览器中看到写的Web页面,但是当在浏览器中输入地址时,出现了404错误,出现这个错误的原因是因为没有找到指定的 ...

  4. 新建maven项目

    1.新建maven project 注意:勾上create a new simple project 2.填写相关信息, Grounp id为大项目名字,Artifact id为小项目的名字.注意:P ...

  5. c++新特性与boost

    <Boost程序库探秘——深度解析C++准标准库>之试读 前一阵子还看到一篇文章,说C#要重蹈C++的覆辙,这里说的C++的覆辙是什么呢?是指C++语言过于臃肿的功能特性,导致学习人员的流 ...

  6. ci中如何得到配置的url

    $this->load->helper('url'); 然后,你可以用它查询并返回设置在config.php文件中的site和/或base URL: echo site_url(); ec ...

  7. ThinkPad紧凑型蓝牙键盘(0B47189)鼠标滚轮用法,F1到F12功能键的功能切换以及其他技巧

    入手小红点蓝牙键盘(ThinkPad Compact Bluetooth),手感极佳,小红点特别适合程序员工作,双手无需离开键盘就可以操作鼠标,完全解决肩部.腕部疲劳酸痛问题,程序员健康的大福音! 使 ...

  8. 织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法

    这个修改方法很简单,从模板无忧那里找到的,只需要在后台系统-SQL命令行工具里面运行以下语句即可,不用采用笨方法重新安装织梦CMS了. 删除所有栏目,新建ID从1开始: ALTER TABLE `de ...

  9. sturct stat 结构体中 st_mode 的含义

    工作中遇到 else if( (s_buf.st_mode&S_IFMT) == S_IFDIR) return 2; else if( !(s_buf.st_mode&S_IFREG ...

  10. 我用的/etc/vimrc

    " 映射非数字/字母键, 如:ctrl,shift, alt, home,end,功能键F1~F12, 要把这些键用尖括号括起来!如: map <F3> :NERDTree< ...