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. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(1)

    1 引言(入门介绍) NVMe版本1.2.1和之前的版本为主机软件与非易失存储系统通过PCIe通信定义了寄存器级接口.本规格说明书定义了对NVMe的扩展,启用通过其他网络互联上的操作(NVMe ove ...

  2. 域渗透-LSA Protection

    简介: 微软在 2014 年 3 月 12 日添加了 LSA 保护策略,用来防止对进程 lsass.exe 的代码注入,这样一来就无法使用 mimikatz 对 lsass.exe 进行注入,相关操作 ...

  3. 数据的查找和提取[2]——xpath解析库的使用

    xpath解析库的使用 在上一节,我们介绍了正则表达式的使用,但是当我们提取数据的限制条件增多的时候,正则表达式会变的十分的复杂,出一丁点错就提取不出来东西了.但python已经为我们提供了许多用于解 ...

  4. Oracle - 自治事务autonomous transaction

    自治事务 - autonomous transaction 在Oracle数据库中,有时候我们会希望记录一个过程或者函数的运行日志,不管正常运行结束还是触发异常结束,都要记录. 正常结束的没有问题,但 ...

  5. 基于Docker搭建Jumpserver堡垒机操作实践

    一.背景 笔者最近想起此前公司使用过的堡垒机系统,觉得用的很方便,而现在的公司并没有搭建此类系统,想着以后说不定可以用上:而且最近也有点时间,因此来了搭建堡垒机系统的兴趣,在搭建过程中参考了比较多的文 ...

  6. Unity进阶:PlayMaker

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  7. macOS平台下Qt应用程序菜单翻译及调整

    一.翻译 在macOS平台上,系统会为应用程序菜单添加一些额外的菜单项.先来看一些典型的例子: 这个是Qt Creator的菜单,系统为应用程序菜单添加了一些桌面显示操作相关的菜单项: 这个是Qt D ...

  8. chrome总是崩溃

    1.在chrome浏览器打开chrome://plugins/ 2.找到不正常的插件,停用即可.比如有的插件安装了2个版本,停用低版本的即可.

  9. HDU-DuoXiao第二场hdu 6315 Naive Operations 线段树

    hdu 6315 题意:对于一个数列a,初始为0,每个a[ i ]对应一个b[i],只有在这个数字上加了b[i]次后,a[i]才会+1. 有q次操作,一种是个区间加1,一种是查询a的区间和. 思路:线 ...

  10. CF991D Bishwock 第十七 贪心

    Bishwock time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...