引言

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. 阿里云云效技术专家:一文详解kubernetes下5种常见发布模式如何选择

    简介: Kubernetes下5场场景应用发布方式的选择,每种发布模式适合什么样的场景,以及如何在阿里云云效上高效落地. 作者:郑云龙,阿里云云效技术专家 Kubernetes面向通用场景提供了非常灵 ...

  2. 【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤

    简介: 以测试集群版本为例(EMR-4.4.1)-- Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1.以测试集群版本 ...

  3. 居然之家:核心业务系统全面上云,采用PolarDB替代传统商业数据库

    ​简介: 国内家居零售龙头企业居然之家完成7大核心业务系统全面上云工作,并实现ERP等核心业务系统从传统商业数据库向阿里云PolarDB云数据库的替换,助力业务系统整体处理能力提升50%以上,弹性能力 ...

  4. OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力

    简介: 阿里云开源的云原生应用自动化管理套件.CNCF Sandbox 项目 -- OpenKruise,今天发布 v0.10.0 新版本,这也会是 OpenKruise v1.0 之前的最后一个 m ...

  5. LlamaIndex 是什么

    LlamaIndex 是一个基于 LLM(大语言模型)的应用程序数据框架,适用于受益于上下文增强的场景. 这类 LLM 系统被称为 RAG(检索增强生成)系统. LlamaIndex 提供了必要的抽象 ...

  6. 火山引擎ByteHouse:OLAP如何支持超高QPS点查?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在当今高速发展的互联网时代,信息传播迅速,用户数量激增.在面对如此庞大的用户群体和高频的访问需求时,系统高并发访问 ...

  7. Solution Set - 图上问题

    CF360E Link&Submission. 首先显然可以选择的边的权值一定会取端点值.事实上,第一个人经过的边选最小,第一个人不经过的边选最大,这样一定不劣.进一步,如果 \(s_1\) ...

  8. Python竖版大屏2 | 用pyecharts开发可视化的奇妙探索!

    目录 1.SHINE主题 2.LIGHT主题 3.MACARONS主题 4.INFOGRAPHIC主题 5.WALDEN主题 6.WESTEROS主题 7.WHITE主题 8.WONDERLAND主题 ...

  9. 【爬虫+数据清洗+可视化分析】Python舆情分析哔哩哔哩"狂飙"的评论

    目录 一.背景介绍 二.爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三.可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间 ...

  10. ansible系列(25)--ansible的notify和handlers

    1. notify和handlers Handlers 是一个触发器,同时是一个特殊的 tasks ,它无法直接运行,它需要被tasks 通知后才会运行.比如: httpd 服务配置文件发生变更,我们 ...