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. Hugo

    快速开始 安装Hugo 1.二进制安装(推荐:简单.快速) 到 Hugo Releases 下载对应的操作系统版本的Hugo二进制文件(hugo或者hugo.exe) Mac下直接使用 ==Homeb ...

  2. Delphi - cxGrid内容xlsx、xls、csv格式导出

    .xls格式导出,uses中添加cxGridExportLink 代码如下: function SaveToExcel(gridMain: TcxGrid; FileName: string): st ...

  3. JS核心之DOM操作 下

    目录: 1.节点类型之Document类型 2.节点类型之Element类型 3.节点类型之Text类型 4.综合小示例 -- 动态添加外部样式文件 5.查找元素的扩展方法 接上篇,我们先来看常用的三 ...

  4. Fire Balls 05——子弹的命中及后续效果

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

  5. Codeforces 1058 D. Vasya and Triangle 分解因子

    传送门:http://codeforces.com/contest/1058/problem/D 题意: 在一个n*m的格点中,问能否找到三个点,使得这三个点围成的三角形面积是矩形的1/k. 思路: ...

  6. Trace 2018徐州icpc网络赛 思维+二分

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy) ...

  7. hdu 1890 Robotic SortI(splay区间旋转操作)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 题解:splay又一高级的功能,区间旋转这个是用线段树这些实现不了的,这题可以学习splay的旋 ...

  8. Codeforces Round #484 (Div. 2) B. Bus of Characters(STL+贪心)982B

    原博主:https://blog.csdn.net/amovement/article/details/80358962 B. Bus of Characters time limit per tes ...

  9. lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...

  10. 线段树模板 hdu 1166 敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...