Arthas GC日志-JVM(十八)

上篇文章说jvm的实际运行情况。

Jvm实际运行情况-JVM(十七)

  • Arthas介绍

因为arthas完全是java代码写的,我们直接用命令启动:

Java -jar arthas-boot.jar

启动成功后,选择我们项目的进程。

进入我们可用dashboard查询看板。

之后可以看到76线程较高,用thread 线程id来查看哪些异常导致cpu过高。

arthas的 jad命令可以反编译线上代码。

当我们系统上线,但我们感觉并没有把代码上线,或者上错分支,这时候怎么办呢,于是可以用这个命令来反编译代码,看看是否正常。

当我们需要查看某个类里对象的值,这时候可以通过

ognl @com.zto.jvm.JvmController@hashSet

甚至调用线上代码修改里面的值:

ognl @com.zto.jvm.JvmController@hashSet.add(“arthasAdd”)

  • GC日志详解

Java -jar -Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

-XX:+PrintGCTimeStamps -XX:+PrintGCCause

-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10

-XX:GCLogFileSize=100M service-eureka-server.jar

这里解释下会把时间戳替换成%t

陆续分段打到10个文件,打100M,保留10个文件,超过一个G则会覆盖。

Parallel:

图上是parallel策略垃圾收集,可以看到minor GC和fullGC。

年轻代在minorGC之前有57M,发生垃圾收集之后成为65M,年轻代总大小为66M。

218M为堆的总大小。

fullGC原因在日志文件也可以看到,原因是Metadata GC threshold,元空间不够。

为什么都是元空间不够导致的fullGC呢,因为项目刚启动,加载类,每次元空间加载类信息满了,会扩展内存加载新的类,所以项目启动时候会因为元空间不够多次fullGC。

CMS:

这时候我们需要改jvm启动参数:

-Xloggc:d:/gc-cms-%t.log  

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

-Xms50M -Xmx50M

首先垃圾收集器改为parNew和CMS,为了快速内存溢出,我们把堆大小设置成50M。

从这些日志可以看到,我们cms垃圾收集器的过程,初始化标记,是会STW的,然后会并发标记,之后重新标记又会STW,之后并发清理会有新对象,这时候标记成黑色方便下次清理,这属于浮动垃圾。

当进入的对象速率超过垃圾回收器回收对象时间,这时候则会单线程serail垃圾回收器回收,从图中Allocation Failture就可以看到内存溢出会进入单线程回收。

G1:

这时候我们需要改jvm启动参数:

-Xloggc:d:/gc-g1-%t.log  -XX:+UseG1GC

这是G1的初始标记,并发标记,最终标记,回收。

Java -XX:+PrintFlagsInitial打印默认值。

Java -XX:+PrintFlagsFinal打印运行程序生效值。

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

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

相关文章

python中几个有趣的函数和推导式

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 一、range()函数 1、range()通常用来做循环。 2、range()生成器的特性。 例子:假如range()中使用的数值特别大,为100000000000000000000000000000? python解释…

Go学习第四天

Interface空接口万能类型与类型断言机制 package mainimport "fmt"// interface{}是万能数据类型 func myFunc(arg interface{}) {fmt.Println("myFunc is celled....")fmt.Println(arg)// interface{} 该如何区分 此时引用的底层数据类型到底是什么&…

iPhone 7透明屏的显示效果怎么样?

iPhone 7是苹果公司于2016年推出的一款智能手机,它采用了4.7英寸的Retina HD显示屏,分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的,但是苹果公司在设计上采用了一些技术,使得用户在使用iPhone 7时可以有一种透明的感觉…

【实操教程】如何开始用Qt Widgets编程?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中&#xff0…

乳腺癌CT影像数据的深度学习:R语言与ANN神经网络构建高性能分类诊断模型

一、引言 乳腺癌是全球最常见的女性恶性肿瘤之一,也影响着男性的健康。据统计,每年有数百万人被诊断出患有乳腺癌[1]。乳腺癌的早期检测和准确诊断对于治疗和预后至关重要。然而,乳腺癌的早期诊断面临许多挑战,如图像解读的主观性…

Qt QThread的moveToThread方法使用

Qt线程简介 从 Qt4.4 版本之后,因为 QThread 的 run 方法创建新线程这样实现与 Qt 设计的理念不符,Qt 主推使用 moveToThread 方法来创建新线程。QThread 应该被看做是操作系统线程的接口或控制点,而不应该包含需要在新线程中运行的代码。需…

数据结构10 -查找_树表查找

创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了,二叉搜索树是一个有序树。 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它…

在线LaTeX公式编辑器编辑公式

在线LaTeX公式编辑器编辑公式 在编辑LaTex文档时候,需要输入公式,可以使用在线LaTeX公式编辑器编辑公式,其链接为: 在线LaTeX公式编辑器,https://www.latexlive.com/home 图1 在线LaTeX公式编辑器界面 图2 在线LaTeX公式编辑器…

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别

Hive Hadoop Hive 和传统关系型数据库区别 Spark 概念 基于内存的分布式计算框架 只负责算 不负责存 spark 在离线计算 功能上 类似于mapreduce的作用 MapReduce的缺点 运行速度慢 (没有充分利用内存)接口比较简单,仅支持Map Reduce功能…

W5100S-EVB-PICO做DNS Client进行域名解析(四)

前言 在上一章节中我们用W5100S-EVB-PICO通过dhcp获取ip地址(网关,子网掩码,dns服务器)等信息,给我们的开发板配置网络信息,成功的接入网络中,那么本章将教大家如何让我们的开发板进行DNS域名解…

kubernetes基于helm部署gitlab

kubernetes基于helm部署gitlab 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab。 先决条件 已运行的 Kubernetes 集群负载均衡器,为ingress-nginx控制器提供EXTERNAL-IP,本示例使用metallb默认存储类,为gitlab pods提供持久化存储&…

深度学习Redis(2):持久化

前言 在上一篇文章中,介绍Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的持…