引言

JVM调优

程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。

故障排查

在Java应用中,系统内存通常会被分为几块不同的空间,了解这些不同内存区域的作用有助于更好地编写Java应用,构建更加稳定的系统。而堆空间更是Java内存中最为重要的区域,几乎所有的应用程序对象都在堆中分配,当系统出现故障时,具备Java堆的内存分析能力,也可以更加方便地诊断系统的故障。

常用分析工具

查看Java进程

jps jcmd 或linux系统命令ps -ef | grep java

查看进程详细信息 jinfo pid

[root@amyiot-local-dev test]# jps
23579 Jps
23327 jar [root@amyiot-local-dev test]# ps -ef | grep java
root 23327 1 4 5月17 ? 00:59:35 java -server -Xms4096m -Xmx4096m -XX:+UseG1GC -Dspring.profiles.active=test -jar xxx.jar --server.port=8010
root 24834 19825 0 14:07 pts/0 00:00:00 grep --color=auto java ##查看进程详细(运行jps后)
jinfo pid ##查看启动参数
jinfo -flags pid ##查看指定参数值
jinfo -flag InitialHeapSize pid ##查看系统属性
jinfo -sysprops pid

查看进程GC情况

jstat

##查看进程pid的情况
jstat -gc pid ##每5秒输出一次
jstat -gc pid 5000 ##每5秒输出一次,输出3次
jstat -gc pid 5000 3 ##查看GC统计信息,每秒输出一次
jstat -gcutil pid 1000 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 99.94 90.56 87.86 875 9.307 3223 5313.139 5322.446
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:Eden Space(伊甸园)区使用比例
O:Old Gen(老年代)使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间 ##最近一次gc原因
jstat -gccause pid ##查看gc容量
jstat -gccapacity pid

查看内存堆使用情况

##堆内存各区域使用情况
jmap -heap 23327 ##转存堆文件heapdump.hprof
jmap -dump:format=b,file=heapdump.hprof pid

分析hprof堆信息

Windows:jvisualvm.exe 堆入hprof文件即可

Linux:jhat

jhat heapdump.hprof
##有时候堆文件可能会很大,在启动时会报堆空间不足的错误,
jhat -J-Xmx512M heapdump.hprof

通过http访问

查看类实例数量

查看线程情况

##查看线程详情信息,包括锁,状态,如果存在死锁,会在结果输出最后打印出来
jstack pid

GC日志输出

##打印GCDetails
-XX:+PrintGCDetails
##GC前输出Heap信息
-XX:+PrintHeapAtGC
##打印GC时输出时间戳
-XX:+PrintGCDateStamps
##打印GC时,输出新年代最大年龄
-XX:+PrintTenuringDistribution
##在控制台输出GC情况
-verbose:gc
##日志文件路径
-Xloggc:/home/gc/log/gc.log
##循环文件日志输出,与下面参数搭配使用
-XX:+UseGCLogFileRotation
##几个日志文件循环
-XX:NumberOfGCLogFiles=3
##输出的每个日志文件大小,如果满了,就往下一个文件写
-XX:GCLogFileSize=10K ##当发生OOM时输出dump文件,常用参数
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof

示例配置

##10个GC文件,从0开始,第0个文件写了大小100K,就使用下一个1号文件
java -server -Xms500m -Xmx500m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:/home/test/log/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10K -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -Dspring.profiles.active=test -jar xxxx.jar --server.port=8010

GC日志可视化分析

GC easy:https://gceasy.io/

1.参数配置

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/temp/gc.log

2.将一段时间内生成的log文件上传至gc easy

JVM性能分析与故障排查的更多相关文章

  1. JVM性能分析与优化

    JVM性能分析与优化: http://www.docin.com/p-757199232.html

  2. JVM命令-java服务器故障排查

    一.top(Linux命令) 执行top命令:    (查看进程15477的详细情况,下文用到) 系统信息(前五行): 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相 ...

  3. JVM性能分析工具详解--MAT等

    获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...

  4. JVM性能分析 | 一次生产系统Full GC问题分析与排查总结

    一次生产系统Full GC问题分析与排查总结 背景 最近某线上业务系统生产环境频频CPU使用率过低,频繁告警,通过重启可以缓解,但是过了一段时间又会继续预警,线上两个服务节点相继出现CPU资源紧张,导 ...

  5. jvm 性能分析

    VM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据.JVM当前所有线程及其栈相关信息等等.各种JDK自带的剖析工具,包括jps.jstack.ji ...

  6. ------ 新春第一炮:阶乘算法性能分析与 double fault 蓝屏故障排查 Part I ------

    -------------------------------------------------------------------------- 春节期间闲来无事想研究下算法,上机测试代码却遇到了 ...

  7. SQL Server 2008性能故障排查(四)——TempDB

    原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...

  8. SQL Server 2008性能故障排查(一)——概论

    原文:SQL Server 2008性能故障排查(一)--概论 备注:本人花了大量下班时间翻译,绝无抄袭,允许转载,但请注明出处.由于篇幅长,无法一篇博文全部说完,同时也没那么快全部翻译完,所以按章节 ...

  9. JVM 线上故障排查基本操作

    # 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该 ...

  10. JVM 线上故障排查基本操作 (转)

    前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该如何 ...

随机推荐

  1. 混合云K8s容器化应用弹性伸缩实战

    简介: 混合云K8s容器化应用弹性伸缩实战 1. 前提条件 本最佳实践的软件环境要求如下:应用环境:①容器服务ACK基于专有云V3.10.0版本.②公共云云企业网服务CEN.③公共云弹性伸缩组服务ES ...

  2. k8s核心资源Job&&CronJob调度pod

    一.Job与CronJob概念与与原理解读 Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 p ...

  3. LVGL 日志

    一.启动日志 在 lv_conf.h 中将 LV_USE_LOG 设置为 1,如下图所示: 二.日志级别 在文件 lvgl/src/misc/lv_log.h 中定义了日志等级,等级是从小到大,所以 ...

  4. Educational Codeforces Round 162 (Rated for Div. 2) E

    E:Link 枚举路径两端的颜色 \(k\). 令 \(g[x]\) 表示满足以下条件的点 \(y\) 数量. $ y \in subtree[x]$ \(col[y] = k\) \(y\) 到 \ ...

  5. JUC并发编程学习笔记(十九)原子引用

    原子引用 带版本号的原子操作! 解决ABA问题,引入原子引用(乐观锁思想) AtomicStampedReference类解决ABA问题 package org.example.cas; import ...

  6. Winform项目中纯代码创建WCF服务

    接口: [ServiceContract(CallbackContract = typeof(IViewCallback), SessionMode = SessionMode.Required)] ...

  7. golang向上取整、向下取整和四舍五入

    一.概述 官方的math 包中提供了取整的方法,向上取整math.Ceil() ,向下取整math.Floor() 二.用法 package main import ( "fmt" ...

  8. 带有声音/音频的 Mac 远程桌面

    一言以蔽之:如果你用远程桌面软件访问mac电脑遇到声音问题,改用Splashtop就好了.Splashtop对于Mac 的远程桌面支持非常棒. 尽管有几种远程桌面工具可提供对 Mac 的远程访问,但许 ...

  9. Unity Linear Gamma色彩空间矫正测试

    Gamma和Linear修正的问题相信网上已经有很多文章了.简单来说显示器的颜色输出不是线性的,根据硬件参数和输出颜色 信息拟合曲线是x^2.2,因此会使用一个x^0.45曲线将其拟合回线性. 因为0 ...

  10. Flink Batch Hash Aggregate

    数据类型要求 BatchPhysicalHashAggRule match 条件会判断 isAggBufferFixedLength(agg) 为什么要求 aggCall 的类型是 Fixed Len ...