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. CentOS -- RocketMQ 4.3.2 standalone Installation and Configuration

    1 Download RockeMQ Package: You need to download it and put it to the OS Image. wget http://apache.c ...

  2. unity之初级工程师

    一.值类型与引用类型 值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中.值类型变量声明后,不管是否已经赋值,编译器为其分配内存.值类型的实例通常是在线程栈上分配的(静态 ...

  3. ESXi安装报错,No network adapters were detected...

    转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/11438066.html 报错内容 No network adapters No Network a ...

  4. js的兼容问题以及解决方式(持续更新)

    我们在使用js操作页面的时候兼容问题是很常见的,下面将常见的兼容问题及其对应的解决方法分享给大家,并持续更新: 1.获取事件对象的兼容写法: IE中:window.event     正常浏览器中:对 ...

  5. qt学习笔记(1):qt点击运行没有反应。

    因为公司的项目需要,今天开始重新学习已经忘干净了的QT, 说起qt之前在学校刚接触的时候就打心底里喜欢这个编辑器, 因为一直使用vs做项目,面对着黑洞洞的窗口总让人不舒服, 自从接触了qt感觉迎来了曙 ...

  6. CentOS搭建php + nginx环境

    更新Centos的yum源 yum update 安装EPEL源和REMI源 yum install epel-release yum install http://rpms.remirepo.net ...

  7. CAS及其ABA问题

    CAS.volatile是JUC包实现同步的基础.Synchronized下的偏向锁.轻量级锁的获取.释放,lock机制下锁的获取.释放,获取失败后线程的入队等操作都是CAS操作锁标志位.state. ...

  8. C#装箱与拆箱总结

    装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了 ...

  9. PAT L3-015. 球队“食物链”

    L3-015. 球队“食物链” 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球联赛中有N支参赛球队 ...

  10. java-冒泡排序笔记

    //冒泡排序public class BubbleSort {    //    public static void main(String[] args) {//        // TODO 自 ...