深入JVM(三)JVM调优

参数分类

在多数项目中不需要进行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___
  • -XX:+HeapDumpOnOutOfMemoryError 在OOM时,输出一个dump文件

常用工具

命令行工具

308C8A7B-5396-4C49-8E39-3BDC9F1D820E

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的堆栈分析工具。

两个功能:

  1. 针对活着的进程做本地的或远程的线程dump;
  2. 针对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

alibaba/arthas

日志/堆栈分析工具

jvirsualvm

-------------本文结束感谢您的阅读-------------

本文标题:深入JVM(三)JVM调优

文章作者:NanYin

发布时间:2020年05月20日 - 15:05

最后更新:2023年07月30日 - 17:07

原始链接: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/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。