JVM调优(一)——参数查询和问题排查
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调优(一)——参数查询和问题排查的更多相关文章
- JVM调优常用参数和注意点备忘录
本文主要是工作过程中总结的一些jvm调优的参数和注意的地方,作为一个备忘录,先占个坑,有时间在来细化具体的实例. gc日志是覆盖的方式如果文件名字固定会导致上一次被覆盖可以采用这个-Xloggc:ba ...
- JVM调优及参数设置
(1)参数 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xmn :年轻代大小 整个堆大小=年轻代大小 + 年老代大小 + 持 ...
- jvm调优具体参数配置
3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...
- JVM调优-GC参数
一.Throughput收集器(吞吐量)-XX:+UseParallelGC-XX:+UseParallelOldGC *参数调整:通过调整堆大小,减少GC停顿时间,增大吞吐量增强堆大小可以减少Ful ...
- JVM调优常用参数配置
堆配置 -Xms:初始堆大小 -Xms:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3表示年轻代和年老代比值为1:3,年轻代占 ...
- JVM调优常用参数总结
GC通用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间 -XX:+UseTLAB 使用TLAB,默认打开 -XX:+PrintTLAB 打印TLAB的使用情况 -XX:T ...
- JVM调优常用参数
JVM常用参数配置 -Xmx2048m 最大堆大小 -Xms1024m 初始堆大小 -Xmn1024m 年轻代大小 -XX:SurvivorRatio=8 Eden区与Survivor区的大小比值,设 ...
- java面试-JVM调优和参数配置,如何查看JVM系统参数默认值
一.JVM的参数类型: 1.标配参数: java -version java -help 2.X参数: -Xmixed 混合模式(先编译后执行) -Xint 解释执行 -Xcomp 第一次使用就编译 ...
- JVM调优参数、方法、工具以及案例总结
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...
- 技能篇:linux服务性能问题排查及jvm调优思路
只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求.最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的.如果你是负责中间件或 ...
随机推荐
- 《Java 8 in Action》Chapter 7:并行数据处理与性能
在Java 7之前,并行处理数据集合非常麻烦.第一,你得明确地把包含数据的数据结构分成若干子部分.第二,你要给每个子部分分配一个独立的线程.第三,你需要在恰当的时候对它们进行同步来避免不希望出现的竞争 ...
- 跨库数据迁移利器 —— Sqoop
一.Sqoop 基本命令 1. 查看所有命令 # sqoop help 2. 查看某条命令的具体使用方法 # sqoop help 命令名 二.Sqoop 与 MySQL 1. 查询MySQL所有数据 ...
- 剖析nsq消息队列(一) 简介及去中心化实现原理
分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了多久就没了.后期的文章我会把nsq的源码 ...
- Java——excel导入导出demo
1. java导入 package xx; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.userm ...
- 标准pcm数据(正弦波、方波、三角波)解读
一年前写了一个demo,用于生成几种标准的波形,如正弦波.方波.三角波.之前写的只有这几个功能:波形/通道/时长/频率的控制选择,这几天抽了些时间又加了增益控制功能.为了避免东西丢失或意外删除,特上传 ...
- 边缘缓存模式(Cache-Aside Pattern)
边缘缓存模式(Cache-Aside Pattern),即按需将数据从数据存储加载到缓存中.此模式最大的作用就是提高性能减少不必要的查询. 1 模式 先从缓存查询数据 如果没有命中缓存则从数据存储查询 ...
- C#装箱与拆箱总结
装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作. 1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了 ...
- VS Code 配置 Python 开发环境
1.终端运行 Python2.安装 Python 插件3.查看.安装外部库4.代码补全工具5.代码检查工具5.1.pylint5.2.flake8 和 yapf 本文基于 VS Code 1.36.1 ...
- cogs1709. [SPOJ 705] 不同的子串(后缀数组
http://cogs.pro:8080/cogs/problem/problem.php?pid=vyziQkWaP 题意:给定一个字符串,计算其不同的子串个数. 思路:ans=总共子串个数-相同的 ...
- 福建工程学院16级第一周寒假作业E题----第七集,奇思妙想
第七集,奇思妙想 ...