JVM的参数类型

标准参数

  • -help
  • -server -client
  • -version -showversion
  • -cp -classpath

X参数

  • -Xint: 解释执行
  • -Xcomp:第一次使用就编译成本地代码
  • -Xmixed:混合模式,JVM自己来决定是否编译成本地代码

XX参数

特点

  • 非标准化参数
  • 相对不稳定
  • 主要用于JVM调优和Debug

分类

  • Boolean类型

    格式:-XX:[+-]<name>表示启用或禁用name属性
    比如:
    -XX:+UseConcMarkSweepGC
    -XX:+UseG1GC
  • 非Boolean类型

    格式:-XX:<name>=<value> 表示name属性的值是value
    比如:
    -XX:MaxGCPauseMilis=500
    XX:GCTimeRatio=19

示例

  • -Xms等价于-XX:InitialHeapSize //初始化的堆大小
  • -Xms等价于-XX:MaxHeapSize //最大堆大小

运行时JVM参数查看

-XX:+PrintFlagsInitial   //查看初始值
-XX:+PrintFlagsFinal //查看最终的值
-XX:+UnlockExperimentalVMOptions //解锁实验参数
-XX:+UnlockDiagnosticVMOptions //解锁诊断参数
-XX:+PrintCommandLineFlags //打印命令行参数

PrintFlagsFinal

=表示默认值

:=被用户户或者JVM修改后的值

jps

查看java进程,类似Linux 中的ps

jinfo

jinfo -flag MaxHeapSize xxxx(进程号)	//查看最大堆内存

jinfo -flag UseConcMarkSweepGC xxx(进程号)		//查看是否使用了这个GC
jinfo -flag UseG1GC xxx(进程号) //是否使用了G1回收器
jinfo -flag UseParallelGC xxx(进程号) //是否使用了并行回收器

jstat查看虚拟机统计信息

命令格式:

options:-class,-compiler,-gc,-printcompilation

类装载

查看类加载信息:

jstat -class xxx(进程号)

说明:
3176(进程号)
1000(1000毫秒,没隔1秒)
10(一共输出10次)
3176这个进程,没隔1s输出一次,一共输出10次

垃圾收集

-gc/-gcutil/-gccause/-gcnew/-gccold

-gc输出结果

S0C/S1C/S0U/S1U:S0和S1的总量与使用量

EC/EU:Eden区总量和使用量

OC/OU:Old区总量与使用量

MC/MU:Metaspace区总量与使用量

CCSC/CCSU:压缩类空间总量与使用量

YGC/YGCT:youngGC的次数与时间

FGC/FGCT:FullGC的次数与时间

GCT:总的GC时间

使用

jstat -gc xxx(进程号) 1000 10   //动态输出,没隔1s输出一次,一共输出10次

JIT编译

查看JIT编译信息

jstat -compiler PID
jstat -printcompilation PID

jmap+MAT实战内存溢出

jvm内存结构

如何导出内存映像文件

内存溢出自动导出

设置两个参数:
-XX:+HeapDumpOnOutOfMemoryError //开启功能
-XX:HeapDumpPath=./ //导出到什么路径

使用jmap命令手动导出

jmap -dump:format=b,file=help.hprof
format=b 导出的格式是二进制的文件

MAT分析内存溢出

  • 下载MAT工具
  • 将导出的映像文件导入到MAT中,进行分析

jstack实战死循环与死锁

线程的状态:

1、new

2、running

3、blocked

4、waiting

5、timed_waiting

6、terminated

实战死循环导致cpu飙高

  • 查看cpu负载:
top	//查看laod average,发现cpu非常高;
  • 在top列表里找到cpu占用高的进程
  • 通过jstack PID > xxx.txt ,通过jstack将该进程的信息打印到xxx.txt的文件中
  • 对进程内部的线程所占用资源情况进行分析:
top -p PID -H 	#查看某个进程内部线程占用情况

发现有5个线程占用的cpu非常高:

  • 将上图分析出来的PID(十进制)转换成十进制:
printf "%x" 8247
2037
  • 在之前步骤里导出的jstack信息的文件中,搜索上个步骤转换出来的十六进制PID

    0x2037 表示一个十六进制的数:2037

    搜索出来之后,就能够看到该线程的堆栈信息了

实战死锁导致cpu飙高

  • 查看项目进程号

    ps -ef | grep tomcat
  • 通过jstack PID > xxx.txt ,通过jstack将该进程的信息打印到xxx.txt的文件中

  • 拉取到文末

该分析工具能准确的找到项目中存在的的死锁和位置

JVM调优(一)——参数查询和问题排查的更多相关文章

  1. JVM调优常用参数和注意点备忘录

    本文主要是工作过程中总结的一些jvm调优的参数和注意的地方,作为一个备忘录,先占个坑,有时间在来细化具体的实例. gc日志是覆盖的方式如果文件名字固定会导致上一次被覆盖可以采用这个-Xloggc:ba ...

  2. JVM调优及参数设置

    (1)参数 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xmn :年轻代大小 整个堆大小=年轻代大小 + 年老代大小 + 持 ...

  3. jvm调优具体参数配置

    3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...

  4. JVM调优-GC参数

    一.Throughput收集器(吞吐量)-XX:+UseParallelGC-XX:+UseParallelOldGC *参数调整:通过调整堆大小,减少GC停顿时间,增大吞吐量增强堆大小可以减少Ful ...

  5. JVM调优常用参数配置

    堆配置 -Xms:初始堆大小 -Xms:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3表示年轻代和年老代比值为1:3,年轻代占 ...

  6. JVM调优常用参数总结

    GC通用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间 -XX:+UseTLAB 使用TLAB,默认打开 -XX:+PrintTLAB 打印TLAB的使用情况 -XX:T ...

  7. JVM调优常用参数

    JVM常用参数配置 -Xmx2048m 最大堆大小 -Xms1024m 初始堆大小 -Xmn1024m 年轻代大小 -XX:SurvivorRatio=8 Eden区与Survivor区的大小比值,设 ...

  8. java面试-JVM调优和参数配置,如何查看JVM系统参数默认值

    一.JVM的参数类型: 1.标配参数: java -version java -help 2.X参数: -Xmixed 混合模式(先编译后执行) -Xint  解释执行 -Xcomp 第一次使用就编译 ...

  9. JVM调优参数、方法、工具以及案例总结

    这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...

  10. 技能篇:linux服务性能问题排查及jvm调优思路

    只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求.最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的.如果你是负责中间件或 ...

随机推荐

  1. Django2.0使用

    创建项目: 通过命令行的方式:首先要进入到安装了django的虚拟环境中.然后执行命令: django-admin startproject [项目的名称] 这样就可以在当前目录下创建一个项目了. 通 ...

  2. vue-小爱ADMIN系列文章(二):微信微博等分享,国际化,前端性能优化,nginx服务器部署

    最近在做我的小爱ADMIN后台管理系统,结合当前市场后台管理系统对相关功能的需求,我又开始新增了一些新的功能和组件,如分享功能组件,项目国际化功能:项目完成后,部署在nginx服务器,发现首次访问的速 ...

  3. Ms Sql server 主键并发冲突解决办法

    问题原因,同事把表的自增长ID主键,改成是自定义的编号,没有严格的并发测试.在多线程同时插入数据时会引起主键冲突: 看了一些道友的文章,尝试了几个方法.经测试 使用 WITH(updlock)  可以 ...

  4. CentOS -- Zookeeper installation and configure

    1 JDK 1.8 must installed first 2 Get Zookeeper package wget https://archive.apache.org/dist/zookeepe ...

  5. Javaweb之国际化

    Javaweb之国际化 一.前言 软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯. 软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应 ...

  6. Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree)

    Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree) 深度优先搜索的解题详细介绍,点击 给定一个 N 叉树,找到其最大深度 ...

  7. 【故障公告】升级阿里云 RDS SQL Server 实例故障经过

    昨天晚上,我们使用的阿里云 RDS SQL Server 2008 R2 实例突然出现持续 CPU 100% 问题,后来我们通过重启实例恢复了正常(详见故障公告).但是在恢复正常后发现了新问题,这台 ...

  8. Codeforces Round #461 (Div. 2)B-Magic Forest+位运算或优雅的暴力

    Magic Forest 题意:就是在1 ~ n中找三个值,满足三角形的要求,同时三个数的异或运算还要为0: , where  denotes the bitwise xor of integers  ...

  9. 2019杭电多校6 hdu6638 Snowy Smile(二维最大矩阵和 线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你一些点的权值,让找一个矩形圈住一部分点,问圈住点的最大权值和 分析:由于是稀疏图,明显要先把x, ...

  10. CodeForces 939E Maximize

    Maximize 题意:整个程序有2种操作,操作1将一个元素放入集合S中,且保证最新插入的元素不小于上一次的元素, 操作2 找到集合S中的某个子集合, 使得 集合中最大的元素减去平均数的值最大. 题解 ...