

深入JVM(三)JVM调优
source link: https://nanyiniu.github.io/2020/05/20/%E6%B7%B1%E5%85%A5JVM%EF%BC%88%E4%B8%89%EF%BC%89JVM%E8%B0%83%E4%BC%98/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

¶ 参数分类
在多数项目中不需要进行JVM调优,在出现OOM或CPU飙高,往往是程序问题,应该想办法优化程序。
但是,在一般情况下,应该在上线前将JVM调整到最优,保证虚拟机:
- GC低停顿
- GC低频率
- 低内存占用
调优中一般会遇到两种参数,一种是任何虚拟机版本都相同的标准参数,这些参数不需要人为调整,另一种是非标准参数,也是不稳定的参数,需要根据实际情况进行设定。
¶ 标准参数
标准参数,以 -
开头,如 -version
¶ 非标准参数
非标准参数 ,以 -X
或-XX
开头,这些参数非常多,并且需要根据不同的情况进行不同的调整。
虚拟机的调优就是在不同的情况下针对这些非标准参数进行调整。
¶ 常用参数
- -Xms 初始化堆内存的最小值
- -Xmx 初始化堆内存的最大值,一般和 Xms的值设为相同的值。
- -Xmn 初始化堆中的新生代大小
- -XX:ParallelGCThreads=8:新生代并行收集器的线程数。
- -Xloggc: /opt/xxx/logs/xxx-xxx-gc-%t.log GC日志输出文件
- -XX:+UseGCLogFileRotation
- -XX:NumberOfGCLogFiles=5
- -XX:GCLogFileSize=20M
- -XX:+PrintGCTimeStamps 打印GC耗时
- -XX:+PrintGCDetails 打印GC回收的细节
- -XX:HeapDumpPath=./java_pid.hprof :堆内存快照的存储文件路径。文件名一般为java__heapDump.hprof。
- -XX:+HeapDumpOnOutOfMemoryError 在OOM时,输出一个dump文件
¶ 常用工具
¶ 命令行工具
¶ jps
JPS(Java Virtual Machine Process Status Tool),可以显示进行中的Java线程。
使用方式:jps [options] [hostid]
¶ jinfo
jinfo(Java Configuration Info),实时查看和调整JVM配置参数.
使用方式: jinfo -flag <name> PID
或者 jinfo -flags PID
¶ jstat -gc
jstat(Java Virtual Machine statistics monitoring tool),能够查看JVM的使用情况
使用方式:jstat [ generalOption | outputOptions vmid [ interval [ s|ms ] [ count ] ] ]
如: jstat -gc -h3 31736 1000 10
¶ jstack
jstack(Java stack trace)是Java的堆栈分析工具。
两个功能:
- 针对活着的进程做本地的或远程的线程dump;
- 针对core文件做线程dump。
使用方式:jstack [ option ] pid
可将堆栈输出到指定文件中:jstack -l PID >> jstack.out
¶ jmap
jmap(Java memory map),它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
命令:jmap pid
描述:查看进程的内存映像信息,类似 Solaris pmap 命令。
命令:jmap -heap pid
描述:显示Java堆详细信息
命令:jmap -histo:live pid
描述:显示堆中对象的统计信息
命令:jmap -dump:format=b,file=heapdump.phrof pid
描述:生成堆转储快照dump文件。
¶ arthas 线上排查工具
arthas 能够完成以上所有的工作,但是需要注意的是,使用jmap或jstack
¶ 日志/堆栈分析工具
¶ jvirsualvm
Recommend
-
56
JVM内存结构简介(jdk1.8)JVM层的GC调优是生产环境上必不可少的一个环节,因为我们需要确定这个进程可以占用多少内存,以及设定一些参数的阀值。以此来优化项目的性能和提高可用性,而且这也是在面试中经常会被问到的问题。想要进行GC调优,我们首先需要简单了解...
-
33
前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、...
-
25
背景 最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 5% 左右的提升,还算不错。 先介绍一下项目的基本情况: 项目...
-
16
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 了解HotSpot常用命令行参数...
-
10
JVM调优原则 Owen Jia 2020年09月10日 80次浏览 JVM调优原则 将进入老年代的对象数量降到最低 减少 Full GC 的执行...
-
20
JVM 问题排查分析上篇(调优经验)
-
15
Nov 30, 2019 - 记一次简单的 JVM 调优 2617 Word Count
-
8
JVM调优实战 发表于 2020-04-18 ...
-
3
2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。 通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图: 可以看出,在观察周期里: 平均每10分钟Y...
-
7
面试官问我JVM调优,我忍不住了! 面试官:今天要不来聊聊JVM...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK