1.性能优化指标
预期吞吐量、预期响应延迟、最大并发数、并发数最大时可接受的吞吐量和延迟、最坏延迟、垃圾收集对延迟的影响
2.性能分析的方法:自顶向下、自底向上
3.操作系统性能监控
1)cpu使用率:vmstat top
监控信息:用户态%、系统态%、io等待时间%、空闲时间%、运行队列
2)内存使用率:free vmstat(si so)
3)锁竞争:pidstat -w
4)网络IO:nicstat
5)磁盘IO:iostat iotop dstat
4.JVM概述
1)hotspot三组件:Runtime JIT MM (2个JIT[server client]和一个解释器)
2)提高CPU缓存命中率(Ordinary Object Pointers) -XX:+UseCompressedOops
3)VM类加载:类加载阶段(加载、链接、初始化)、类加载委派、启动类加载器(client模式下加速加载,类数据共享 -Xshare:on/off)、类型安全、hotspot类元数据、内部的类加载数据
4)偏向锁:-XX:+UseBiasedLocking
5)错误显示:-XX:+ShowMessageBoxOnError
-XX:OnOutOfMemeryError=<cmd> -XX:+HeapDumpOnOutOfMemery -XX:HeapDump- Path=<path>
6)垃圾收集器
分代垃圾收集:存活时间和对象引用
新生代:Eden、Survivor(from to),minorGC过程中,当to的空间不足时则过早提升,甚至造成晋升失败而进行fullGC,Eden区域使用了指针碰撞,只需检测top到Eden end之间的容量即可,在Eden区中有一小块内存TLAB避免安全加锁影响分配性能。
老年代、永久代
垃圾收集器分类:
Serial:新生代复制算法,老年代标记-压缩,串行方式stop-the-world
Parallel(Throughput):吞吐量为先,新生代复制算法,老年代标记-清除,并行的方式进行GC
Mostly-Concurrent:低延迟为先,CMS收集器,新生代依然同于上2种,而老年代中尽量与用户线程并发工作
初始标记-预清除-重新标记-并发清除(每个动作都是并发的)
由于空闲空间不是连续的,所以必须有空闲列表进行记录,这对MinorGC造成了开销,晋升时候都的在old区进行内存分配,都得记录到空闲列表。
Garbage-First:将堆分成相同尺寸的region,region中垃圾堆积的价值、优先列表、Remenbered Set
7)应用程序对收集器的影响
内存分配、存活数据量、老年代中的更新
8)编译器
解释器->编译器 (引用计数器和回边计数器)
Client JIT和Server JIT
混合JIT:-server -XX:+TieredCompilation
9)自适应调优
-XX:+PrintCommandLIneFlags查看自动优化参数
5.JVM性能监控
1)垃圾收集
-XX:+UseParalleGC/-XX:+UseParallelOldGC时,可带参数-XX:-ScavengeBeforeFullGC可在FullGC前不惊醒MinorGC
-XX:+PrintGCDetails -verbose:gc
-XX:+UseConcMarkSweepGC 使用CMS收集器
监控晋升分布:-XX:+PrintTenuring-Distribution
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -xloggc:<filename>
应用并发时间和应用停止时间:
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
安全点:-XX:+PrintSafepointStatistics
2)图形化工具
jconsole:启动应用是加上参数 -Dcom.sun.management.jmxremote
visualVM:远程监控需要策略文件jstatd.policy
grant codebase "file:${java.home}/../lib/tool.jar" {
permission java.security.AllPermission;
}
jstat -J -Djava.security.policy=/absolutePath/jstatd.policy
jps remote_hostname
JMX: com.sun.management,jmxremote.port/ssl[true | false]/authenticate[true | false]
3)JIT编译器
编译器监控:-XX:+PrintCompilation
4)类加载:永久代
-XX:PermSize -XX:MaxPermSize
5)Mbean进行应用监控
6.java性能分析
1)工具:http://developer.51cto.com/art/201204/327130.htm http://www.ibm.com/developerworks/cn/java/j-lo-profiling/index.html?ca=drs-
2)性能优化的机会:使用更高效的算法、减少锁竞争、为算法生成更有效的代码
3)应用程序的系统需求
可用性、可管理性、延迟及响应性、内存占用、启动时间
4)JVM运行模式
-server(复杂的生成代码优化功能) -client(启动快,内存小) 混合模式
5)垃圾收集器调优
性能属性:吞吐量、延迟、内存占用
原则:MinorGC垃圾收集最大化、GC内存最大化、GC调优3选2(吞吐量、延迟、内存)
6)确定内存占用
活跃数据:长期存活对象或FullGC后还活着的对象
堆大小设置成老年代活跃数据的3~4倍 -Xms -Xmx
新生代设置成老年代活跃数据的1~1.5倍
永久代是永久代的活跃数据1.2~1.5 -XX:PermSIze=n -XX:MaxPermSIze=n
7)延迟调优
分别统计MinorGC和FullGC的时间和次数
-XX:SurvivorRatio=<ratio>
-XX:MaxTenuringThreshold=<n>
-XX:CMSInitiatingOccupancyFraction=<percent>
-XX:+UseCMSInitatingOccupancyOnly
禁止显示GC:-XX:ExplicitGCInvokerConcurrent -XX:ExplicitGCInvokerConcurrentAndUnloadsClasses
CMS永久代垃圾收集:
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:CMSInitiatingPermOccupancyFraction=<percent>
-XX:+UseCMSInitatingOccupancyOnly
重新标记使用线程数:-XX:ParallelGCThreads=<n>
-XX:+CMScavengeBeforeRemark -XX:+ParallelRefProcEnabled
8)实验性最大优化:-XX:+AggressiveOpts
9)逃逸分析:-XX:+DoEscapeAnalysis
10)偏向锁:-XX:UseBiasedLocking
12)大页面:-XX:+UseLargePages
7.java多线程实现:通过线程轮询将线程分配给处理器执行。
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial
-XX:MaxDirectMemorySize -verbose:class -XX:TraceClassLoading -XX:TraceClassUnloading
-XX:PreTenuringSizeThreshold=xxx
8.垃圾收集算法和收集器
Mark-sweep Copying Mark-Compact Generational-Collection
Serial/Serial Old ParNew Parallel Scavenge/Parallel Old(Throghput) CMS G1
9.工具
jps jstat jinfo jmap jhat jstack jconsole visualvm
相关推荐
JVM性能优化笔记 ------------------------------------------
Jvm性能优化-JVM内存结构原理分析03
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
JVM性能优化:线程锁优化
面试题必问的jvm性能优化相关,如何在实际项目中优化jvm,解决项目中性能问题。提升系统的稳定性,以及可维护性。
JVM性能优化相关问题
Java虚拟机JVM性能优化(一):JVM知识总结
JVM性能优化相关问题.zip
JVM性能优化,oracle培训的资料,讲解了JVM内存分配,GC回收机制以及如何优化
Java助力需要jvm学习及优化与性能瓶颈分析参考
【面试资料】-(机构内训资料)JVM性能优化相关问题
很详细的关于Java虚拟机的PPT,对Java虚拟机的学习会有很大的帮助!
java面试资料 当虚拟机启动时,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样可以省去许多不必要的编译时间。并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,,将有价值...
性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...
JVM 面试题:Java 类加载过程、JVM 加载 Class 文件的原理机制、Java内存分配
1、B商家批量导出功能,在gc方式为PS时,批量导出功能的对象java.util.zip.XXX在内存中持续增长,但是当达到JVM设置的-Xms4096m -X
性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...