9

深入JVM(三)JVM调优

 4 years ago
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.
neoserver,ios ssh client

参数分类

在多数项目中不需要进行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文件

常用工具

命令行工具

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


Recommend

  • 56
    • blog.51cto.com 6 years ago
    • Cache

    JVM层GC调优(上)-zero菌

    JVM内存结构简介(jdk1.8)JVM层的GC调优是生产环境上必不可少的一个环节,因为我们需要确定这个进程可以占用多少内存,以及设定一些参数的阀值。以此来优化项目的性能和提高可用性,而且这也是在面试中经常会被问到的问题。想要进行GC调优,我们首先需要简单了解...

  • 33
    • segmentfault.com 5 years ago
    • Cache

    JVM性能调优详解

    前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、...

  • 25
    • zhenbianshu.github.io 5 years ago
    • Cache

    记一次简单的 JVM 调优

    背景 最近对负责的项目进行了一次性能优化,其中包括对 JVM 参数的调整,算是进行了一次简单的 JVM 调优,JVM 参数调整之后,服务的整体性能有 5% 左右的提升,还算不错。 先介绍一下项目的基本情况: 项目...

  • 16
    • segmentfault.com 4 years ago
    • Cache

    JVM系列【6】GC与调优2

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 了解HotSpot常用命令行参数...

  • 10
    • blog.shareworld.vip 4 years ago
    • Cache

    JVM调优原则

    JVM调优原则 Owen Jia 2020年09月10日 80次浏览 JVM调优原则 将进入老年代的对象数量降到最低 减少 Full GC 的执行...

  • 20
    • kimmking.blog.csdn.net 4 years ago
    • Cache

    JVM 问题排查分析上篇(调优经验)

    JVM 问题排查分析上篇(调优经验)

  • 15
    • zhenbianshu.github.io 4 years ago
    • Cache

    记一次简单的 JVM 调优 - 枕边书

    Nov 30, 2019 - 记一次简单的 JVM 调优 2617 Word Count

  • 8
    • duanguangguang.github.io 4 years ago
    • Cache

    JVM调优实战

    JVM调优实战 发表于 2020-04-18 ...

  • 3
    • my.oschina.net 3 years ago
    • Cache

    高并发场景下JVM调优实践之路

    2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。 通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图: 可以看出,在观察周期里: 平均每10分钟Y...

  • 7

    面试官问我JVM调优,我忍不住了! 面试官:今天要不来聊聊JVM...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK