JVM性能调优

一、性能调优目的

1. 减少`minor gc`的频率,将转移到老年代的对象数量降低到最新
2. 减少`full gc`次数
3. 找到并提升性能瓶颈

二、软件调优大致过程

  1. 查看内存和GC日志
-verbose.gc:显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。
-XX:+PrintGC      #输出GC日志    
-XX:+PrintGCDetails    #输出GC的详细日志    
-XX:+PrintGCTimeStamps   #输出GC时间戳(以基准时间的形式)    
-XX:+PrintHeapAtGC    #在进行GC的前后打印出堆的信息    
-Xloggc:/path/gc.log    #日志文件的输出路径    
-XX:+PrintGCApplicationStoppedTime    #打印由GC产生的停顿时间
  1. 调整新生代和老年代比例
# 新生代和老年代一般内存比例为 1:2
-Xms # 初始堆大小
-Xmx # 最大堆大小
-Xmn # 新生代大小
-XX:NewRatio=n # 新生代和老年代的比例,一般为2,新生代1:老年代2
-XX:PermSize=n # 非堆内存大小,一般为物理内存1/64
-XX:MaxPermSize=n # 非堆内存最大值,默认是物理内存的1/4
# 新生代中 Eden和Survivor区设置(Survivor还分为to Survivor和from Survivor)
-XX:SurvivorRatio=n:新生代中Eden区与两个Survivor区的比值
-XX:PretenureSizeThreshold:直接进入老年代中的对象大小
-XX:MaxTenuringThreshold:进入老年代的年龄

性能分析

  1. 性能达标条件
  • Minor GC执行时间不超过50ms
  • Minor GC执行频率在10s一次以上
  • Full GC执行时间不到1s
  • Full GC执行频率在10分钟一次以上

常用工具列表

  1. 内存监控和故障处理
  • jps: JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程。
  • jstat: JVM statistics Monitoring, 是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
  • jmap: JVM Memory Map用于生成heap dump文件。
  • jhat: JVM Heap Analysis Tool, 与jmap搭配使用,用来分析jmap生成的dumpjhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。
    jstack: 用于生成java虚拟机当前时刻的线程快照。
  • jinfo: JVM Configuration info实时查看和调整虚拟机运行参数。
  • javap: 查看经javac之后产生的JVM字节码代码,自动解析.class文件, 避免了去理解class文件格式以及手动解析class文件内容。
  • jcmd: 几乎集合了jpsjstatjinfojmapjstack所有功能,一个多功能工具, 可以用来导出堆, 查看Java进程、导出线程信息、 执行GC、查看性能相关数据等。
  1. jdk自带调优工具
  • jconsole: Java Monitoring and Management Console, 监控内存,线程和类
  • jvisualvm: 全能工具,可以分析内存快照、线程快照;监控内存变化、GC变化等
  1. 第三方工具
  • MAT: Memory Analyzer Tool, Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗, 基于Eclipse
  • GChisto: 分析gc日志的工具

JPS

  • 查看基于HotSpotJVM里,具有访问权限的java进程的具体状态
jps [options] [hostid]
-q  #禁止输出类名,JAR文件名和传递给main方法的参数,只产生一个本地JVM标识符列表。
-m  #显示传递给主方法的参数。 嵌入式JVM的输出可能为空。输出JVM启动时传递给main()的参数。
-l  #显示应用程序主类的完整程序包名称或应用程序JAR文件的完整路径名称。
-v  #显示传递给JVM的参数。
-V  #禁止输出类名,JAR文件名和传递给main方法的参数,只产生一个本地JVM标识符列表(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)。
-Joption  #将选项传递给JVM,其中选项是Java应用程序启动器参考页上描述的选项之一。 例如,-J -Xms48m将启动内存设置为48 MB。

Jstat

  • 另开一篇

Jmap

  • 用于生成heap dump文件,如果不使用这个命令,可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM时自动生成dunp文件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容