ArthasGC日志GCeasy详解

Arthas详解

Arthas是阿里巴巴在2018年9月开源的Java诊断工具,支持JDK6+,采用命令行交互模式,可以方便定位和诊断线上程序运行问题.Arthas官方文档十分详细.详见:官方文档

Arthas使用场景

在这里插入图片描述

Arthas使用

# github下载arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下载
wget https://arthas.gitee.io/arthas-boot.jar

运行以下代码

package com.fanqiechaodan;import java.util.HashSet;/*** @author fanqiechaodan* @Classname ArthasDemo* @Description*/
public class ArthasDemo {private static HashSet<String> HASH_SET = new HashSet<>();public static void main(String[] args) {// 模拟CPU过高cpuHigh();// 模拟线程死锁deadThread();// 不断的向HashSet增加数据addHashSetThread();}private static void addHashSetThread() {new Thread(()->{int count = 0;while (true){try {HASH_SET.add("count:"+count);Thread.sleep(1000);count++;} catch (InterruptedException e) {e.printStackTrace();}}}).start();}private static void deadThread() {Object lock1 = new Object();Object lock2 = new Object();new Thread(()->{synchronized (lock1){try {System.out.println("thread1 start");Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock2){System.out.println("thread1 end");}}}).start();new Thread(()->{synchronized (lock2){try {System.out.println("thread2 start");Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock1){System.out.println("thread2 end");}}}).start();}private static void cpuHigh() {new Thread(()->{while (true){}}).start();}
}

运行Arthas

java -jar arthas-boot.jar

在这里插入图片描述

选择进程序号1,进入进程信息操作

在这里插入图片描述

输入dashboard可以查看整个进程的运行情况,线程,内存,GC,运行环境等信息:

在这里插入图片描述

输入thread可以查看线程详细情况

在这里插入图片描述

输入thread加上线程ID可以查看线程堆栈

在这里插入图片描述

输入thread -b可以查看线程死锁

在这里插入图片描述

输入jad加类的全名,可以反编译,这样可以方便我们查看线上代码是否是正确的版本

在这里插入图片描述

输入ognl查看静态字段的值

在这里插入图片描述

ongl还可以修改静态变量

在这里插入图片描述

更多命令可以用help命令查看,或者查看文档

GC日志详解

对于Java应用我们可以通过一些配置把程序运行过程中的GC日志全部打印出来,然后分析GC日志得到关键性指标,分析GC原因,调优JVM参数.

ParallelGC

打印GC日志方法,在JVM参数里增加参数,%t代表时间

-Xloggc:./GC-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseParallelGC -Xmx2048m -Xms2048m

Tomcat则直接加在JAVA_OPTS变量里.

在这里插入图片描述

CommandLine flags是项目的配置参数,这里不仅配置了打印GC日志,还有相关的JVM参数.

2024-05-06T20:17:01.133+0800: 9.079: [Full GC (Metadata GC Threshold) [PSYoungGen: 17029K->0K(611840K)] [ParOldGen: 96K->16294K(1398272K)] 17125K->16294K(2010112K), [Metaspace: 20743K->20743K(1067008K)], 0.0536606 secs] [Times: user=0.20 sys=0.01, real=0.05 secs] 

是在这个GC时间点发生GC之后相关GC情况

  • 9.079:这是从JVM启动开始计算到这次GC经过的时间,前面还有具体的发生时间日期
  • Full GC (Metadata GC Threshold): 指这是一次Full GC,括号里是GC的原因,PSYoungGen是年轻代的GC,ParOldGen是老年代的GC,Metaspace是元空间的GC
  • 17029K->0K(611840K): 这三个数字分别对应GC之前占用年轻代的大小,GC之后年轻代占用,以及整个年轻代的大小
  • 96K->16294K(1398272K): 这三个数字分别对应GC之前占用老年代的大小,GC之后老年代占用,以及整个老年代的大小
  • 20743K->20743K(1067008K): 这三个数字分别对应GC之前占用元空间内存的大小,GC之后元空间内存占用,以及整个元空间内存大小
  • 0.0536606 secs:是该时间点GC总耗费时间

从日志可以发现几次Full GC都是由于元空间不够导致的,所以我们可以将元空间调大点

-Xloggc:./GC-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseParallelGC -Xmx2048m -Xms2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

调整完我们再看下GC日志已经没有因为元空间不够导致的Full GC了

在这里插入图片描述

对于CMS和G1收集器的日志可能会有点不一样,也可以尝试打印对应的GC日志分析下.

package com.fanqiechaodan;import java.util.ArrayList;
import java.util.List;/*** @author fanqiechaodan* @Classname G1CMSDemo* @Description*/
public class HeapDemo {/*** 100KB*/byte[] BYTE = new byte[1024*100];public static void main(String[] args) throws InterruptedException {List<HeapDemo> heapDemoList = new ArrayList<>();while (true){heapDemoList.add(new HeapDemo());Thread.sleep(10);}}
}

CMS

-Xloggc:./GC-CMS-%t.log -Xms50M -Xmx50M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps    -XX:+PrintGCTimeStamps -XX:+PrintGCCause  -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC

在这里插入图片描述

这里的日志记录的就更为详细,每个CMS的阶段(初始标记,并发标记,重新标记,并发重置)都有涉及.

G1

-Xloggc:./G1-GC-%t.log -Xms50M -Xmx50M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps    -XX:+PrintGCTimeStamps -XX:+PrintGCCause  -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseG1GC  

在这里插入图片描述

GCeasy详解

以上的参数,能够帮我们查看分析GC的垃圾收集情况,但是如果GC日志很多很多,成千上万行.就算一目十行,看完了脑子也还是一片空白.所以我们可以借助一些东西来帮助我们分析.这里推荐GCeasy.可以上传GC文件,然后会利用可视化界面来展示GC情况.具体下图所示.

在这里插入图片描述

上图我们可以看到年轻代,老年代以及永久代的内存分配和最大使用情况

在这里插入图片描述

上图我们可以看到堆内存在GC之前和之后的变化.以及其他的信息

在这里插入图片描述

这个工具还提供基于机器学习的JVM只能优化建议.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解tensorflow.js

1、浏览器中进行机器学习的优势 浏览器中进行机器学习&#xff0c;相对比与服务器端来讲&#xff0c;将拥有以下四大优势&#xff1a; 不需要安装软件或驱动&#xff08;打开浏览器即可使用&#xff09;&#xff1b;可以通过浏览器进行更加方便的人机交互&#xff1b;可以通过…

智慧手术室手麻系统源码,C#手术麻醉临床信息系统源码,符合三级甲等医院评审要求

手麻系统全套源码&#xff0c;C#手术麻醉系统源码&#xff0c;支持二次开发&#xff0c;授权后可商用。 手术麻醉临床信息系统功能符合三级甲等医院评审要求&#xff0c;实现与医院现有信息系统如HIS、LIS、PACS、EMR等系统全面对接&#xff0c;全面覆盖从患者入院&#xff0c;…

前端css中径向渐变(radial-gradient)的使用

前端css中径向渐变的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、径向渐变的形状1.椭圆形渐变&#xff08;ellipse&#xff09;&#xff0c;源码12.源码1运行效果3.圆形渐变&#xff08;circle&#xff09;&#xff0c;源码24.源码2运行效果 &#xff08;二&…

C++青少年简明教程:C++程序结构

C青少年简明教程&#xff1a;C程序结构 一个简单的C程序源码如下&#xff1a; #include <iostream> using namespace std;int main() {cout << "Hello World" << endl;return 0; }下面解析一下。 1. #include <iostream> 这行代码的意思…

Python包管理工具

1、python包管理 在java开发生态&#xff0c;我们早已习惯使用maven或者gradle来构建和管理java项目。通过构建工具&#xff0c;我们可以非常方便对项目的依赖、打包、部署等进行管理&#xff0c;极大的减少手工操作的复杂性。 如果使用python开发生态&#xff0c;我们同样可…

k8s概述及核心组件

一、k8s概述 1.1 引言 docker compose 单机编排工具 有企业在用 docker swarm 能够在多台主机中构建一个docker集群 基本淘汰集群化管理处理工具 容器 微服务封装 dockerfile 编写成镜像 然后进行发布 dockerfile 可以写成shell脚本&#xff08;函数做调…

Kafka应用Demo:指派分区订阅消息消费

环境准备 Kafka环境搭建和生产者样例代码与《Kafka应用Demo&#xff1a;按主题订阅消费消息》相同。 消费者代码样例 public class KafkaConsumerService {private static final Logger LOGGER LoggerFactory.getLogger(KafkaConsumerService.class);private static final S…

【DFT】高 K/金属栅极阈值电压偏移的密度泛函模型

文章《Density functional model of threshold voltage shifts at High-K/Metal gates》&#xff0c;是由R. Cao、Z. Zhang、Y. Guo、J. Robertson等人撰写&#xff0c;发表在《Solid-State Electronics》期刊上。通过密度泛函理论&#xff08;Density Functional Theory, DFT&…

Redis(无中心化集群搭建)

文章目录 1.无中心化集群1.基本介绍2.集群说明 2.基本环境搭建1.部署规划&#xff08;6台服务器&#xff09;2.首先删除上次的rdb和aof文件&#xff08;对之前的三台服务器都操作&#xff09;1.首先分别登录命令行&#xff0c;关闭redis2.清除/root/下的rdb和aof文件3.把上次的…

大数据技术架构

一、hadoop 1、基础知识 1.1、概念 ①Hadoop集群特点&#xff1a;高可靠性、高效性、高可拓展性、高容错性、成本低、运行在Linux操作系统上、支持多种编程语言 ②Hadoop的由来&#xff1a; 谷歌的三驾马车对应的开源软件描述GFS&#xff1a;海量数据怎么存HDFS分布式文件…

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…

oracle 数据库找到UDUMP的文件名称

oracle 数据库找到UDUMP的文件名称 select p.value||\||i.instance_name||_ora_||spid||.trc as "trace_file_name" from v$parameter p ,v$process pro, v$session s, (select sid from v$mystat where rownum1) m, v$instance i where lower(p.name)user_dump_…

orbslam2基础

目录 一、 内容概要二、 orbslam2基础介绍三 、 orbslam2安装3.1 安装依赖3.2 安装orbslam23.3 下载Kitee数据集 四、 进行ORBSLAM2仿真五、 心得体会六、 参考链接 一、 内容概要 orbslam2基础介绍orbslam2安装orbslam2使用案例&#xff1a;orbslam2kitti数据集序列图像 二、…

转发_重定向

1.Servlet/JSP单独使用的弊端 当我们用Servlet或者JSP单独处理请求的时候 Servlet&#xff1a;拼接大量的html字符串 造成可读性差、难以维护JSP&#xff1a;使得html和Java代码互相交织 也造成了可读性差、难以维护的后果 最合适的做法就是两者结合使用 2.ServletJSP处理请…

OpenCV4.9如何将失焦图片去模糊滤镜(67)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9的基于距离变换和分水岭算法的图像分割(66) 下一篇 :OpenCV4.9去运动模糊滤镜(68) 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是退化图像模型失焦图像的 PSF 是多少如何恢复…

【Linux调试器】:gdb的使用(常见指令)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux调试器gdb的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

消除模型盲区,让透明件身后模型无所遁形

使用SOLIDWORKS设计产品出工程图&#xff0c;当模型中存在透明零部件时&#xff0c;由于位置摆放可能会遮挡其他零件。 这会影响零件在工程图中展示装配关系。 通常我们会采用剖视图或改变视图方向来展示被遮挡的零件。 SOLIDWORKS 2023版本发布了工程图中透视透明的零部件功能…

分布式锁讲解

概括 分布式锁是一种用于在分布式系统中实现同步机制的锁。在单机系统中&#xff0c;我们可以使用如Java中的synchronized关键字或者 ReentrantLock来实现线程间的同步&#xff0c;但在分布式系统中&#xff0c;由于多个节点&#xff08;服务器&#xff09;之间的并发操作&am…

Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

CVPR2019https://github.com/XuecaiHu/Meta-SR-Pytorch 问题引入 首个解决任意尺度超分问题的模型&#xff0c;借鉴了meta-learning的思想&#xff1b;weight prediction strategy(meta-learning)&#xff1a;神经网络的权重是由另一个神经网络预测的&#xff0c;而不是通过从…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…