Captain's Geek-Island Captain's Geek-Island
首页
生活如斯乎
架构师的路
  • 分类
  • 标签
  • 归档
沉洋官网 (opens new window)

SleepyOcean

走,找新大陆去
首页
生活如斯乎
架构师的路
  • 分类
  • 标签
  • 归档
沉洋官网 (opens new window)
  • 计算机基础

  • 并发专题

  • 性能调优专题

    • JVM - 虚拟机原理
    • JVM - 调优手册
      • 常用命令
      • 常用命令详解
        • jinfo
        • jstat
      • 常用收集器组合方式
      • 堆栈设置
      • 垃圾回收统计信息
      • 收集器设置
      • 并行收集器设置
      • CMS收集器设置
      • G1收集器设置
      • GC日志分析
      • 常见异常
    • 数据库 - MYSQL
    • 数据库 - MySQL索引原理
  • 工具专题

  • 源码框架专题

  • 设计模式

  • 分布式专题

  • 实战专题

  • 技术杂文

  • 云原生专题

  • 大数据分析专题

  • 前端专题

  • 运维专题

  • 经验专题

  • 面试专题

  • 软实力专题

  • 架构师的路
  • 性能调优专题
SleepyOcean
2020-03-24

JVM - 调优工具手册

本文作为手册,在性能调优时可参考手册进行相应的调优参数配置

# 常用命令

# 列出当前运行的Java进程
$ jps -l 

# 列出指定Java进程的堆内存信息 (23495代表指定的Java进程ID)
$ jmap -heap 23495

# 导出堆内存信息 (E:\output\jmap.bin代表输出的文件路径,23495代表指定的Java进程ID)
$ jmap -dump:format=b,file=E:\output\jmap.bin 23495

# 列出指定Java进程中存活的对象信息 (23495代表指定的Java进程ID,head -20 代表显示前20行,Windows中不支持head)
$ jmap -histo:live 23495 | head -20

# 每隔指定时间输出gc信息 (23495代表指定的Java进程ID, 5000代表每个5s刷新一次输出)
$ jstat -gc 23495 5000
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 常用命令详解

# jinfo

查看正在运行的Java应用程序的扩展参数

# 查看jvm的参数
jinfo -flags <pid>

# 查看java系统参数
jinfo -sysprops <pid>
1
2
3
4
5

# jstat

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

注意:使用的jdk版本是jdk8.

# 类加载统计
jstat -class <pid>
1
2

# 常用收集器组合方式

组合方式 类型 适用情形
Serial + Serial Old 都串行 单CPU(或CPU较少)、小型客户端
ParNew + Serial Old 新生代并行 + 老年代串行 资源倾向新生代(响应快的web服务)
Parallel Scavenge + Serial Old 新生代并行(高吞吐) + 老年代串行 资源倾向新生代(吞吐量高的web服务)
Parallel Scavenge + Parallel Old Java8默认,都并行(高吞吐) 多CPU、吞吐优先(后台处理、科学计算)
ParNew + CMS 新生代并行 + 老年代并发 多CPU、响应优先(web服务、实时计算)
G1(ParNew + CMS的增强) 并发 + 并行

# 堆栈设置

GC参数 参数含义
-Xss 每个线程的栈大小
-Xms 初始堆大小,默认物理内存的1/64
-Xmx 最大堆大小,默认物理内存的1/4
-Xmn 新生代大小
-XX:NewSize 设置新生代初始大小
-XX:NewRatio 默认2表示新生代占年老代的1/2,占整个堆内存的1/3。
-XX:SurvivorRatio 默认8表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。
-XX:MaxMetaspaceSize 设置元空间最大允许大小,默认不受限制,JVM Metaspace会进行动态扩展。

# 垃圾回收统计信息

GC参数
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename

# 收集器设置

GC参数 参数含义
-XX:+UseSerialGC 设置串行收集器
-XX:+UseParallelGC 设置并行收集器
-XX:+UseParallelOldGC 老年代使用并行回收收集器
-XX:+UseParNewGC 在新生代使用并行收集器
-XX:+UseParalledlOldGC 设置并行老年代收集器
-XX:+UseConcMarkSweepGC 设置CMS并发收集器
-XX:+UseG1GC 设置G1收集器
-XX:ParallelGCThreads 设置用于垃圾回收的线程数

# 并行收集器设置

GC参数 参数含义
-XX:ParallelGCThreads 设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis 设置并行收集最大暂停时间
-XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

# CMS收集器设置

GC参数 参数含义
-XX:+UseConcMarkSweepGC 设置CMS并发收集器
-XX:+CMSIncrementalMode 设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads 设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。
-XX:CMSFullGCsBeforeCompaction 设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled 允许对类元数据进行回收
-XX:UseCMSInitiatingOccupancyOnly 表示只在到达阀值的时候,才进行CMS回收
-XX:+CMSIncrementalMode 设置为增量模式。适用于单CPU情况
-XX:ParallelCMSThreads 设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction 设置CMS收集器在老年代空间被使用多少后触发
-XX:+UseCMSCompactAtFullCollection 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

# G1收集器设置

GC参数 参数含义
-XX:+UseG1GC 使用G1收集器
-XX:ParallelGCThreads 指定GC工作的线程数量
-XX:G1HeapRegionSize 指定分区大小(1MB~32MB,且必须是2的幂),默认将整堆划分为2048个分区
-XX:GCTimeRatio 吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾收集
-XX:MaxGCPauseMillis 目标暂停时间(默认200ms)
-XX:G1NewSizePercent 新生代内存初始空间(默认整堆5%)
-XX:G1MaxNewSizePercent 新生代内存最大空间
-XX:TargetSurvivorRatio Survivor填充容量(默认50%)
-XX:MaxTenuringThreshold 最大任期阈值(默认15)
-XX:InitiatingHeapOccupancyPercen 老年代占用空间超过整堆比IHOP阈值(默认45%),超过则执行混合收集
-XX:G1HeapWastePercent 堆废物百分比(默认5%)
-XX:G1MixedGCCountTarget 参数混合周期的最大总次数(默认8)

# GC日志分析

image.png

[GC [PSYoungGen: 8192K->1000K(9216K)] 16004K->14604K(29696K), 0.0317424 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
[GC [PSYoungGen: 9192K->1016K(9216K)] 22796K->20780K(29696K), 0.0314567 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
[Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20435K->20435K(20480K)] 28627K->28627K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1307495 secs] [Times: user=0.50 sys=0.00, real=0.13 secs]
[Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20437K->20437K(20480K)] 28629K->28629K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1240311 secs] [Times: user=0.42 sys=0.00, real=0.12 secs]
1
2
3
4

# 常见异常

  • StackOverflowError:(栈溢出)
  • OutOfMemoryError: Java heap space(堆空间不足)
  • OutOfMemoryError: GC overhead limit exceeded (GC花费的时间超过 98%, 并且GC回收的内存少于 2%)
#Java #JVM #性能调优
上次更新: 2020/08/05, 09:08:00

← JVM - 虚拟机原理 数据库 - MYSQL →

新鲜出炉
01
记录 - 快速搭建自动化部署平台
04-13
02
Docker搭建各类Paas服务
03-01
03
系统配置 - Android TV配置
02-12
更多文章>
Copyright © 2019-2022 SleepyOcean | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式