Java 诊断利器 Arthas JVM命令

news2024/11/27 0:52:04

一、jvm 相关命令介绍

命令说明
dashboard当前系统的实时数据面板
getstatic查看类的静态属性
heapdumpdump java heap, 类似 jmap 命令的 heap dump 功能
jvm查看当前 JVM 的信息
logger查看和修改 logger
mbean查看 Mbean 的信息
memory查看 JVM 的内存信息
ognl执行 ognl 表达式
perfcounter查看当前 JVM 的 Perf Counter 信息
sysenv查看 JVM 的环境变量
sysprop查看和修改 JVM 的系统属性
thread查看当前 JVM 的线程堆栈信息
vmoption查看和修改 JVM 里诊断相关的 option
vmtool从 jvm 里查询对象,执行 forceGC

二、jvm 命令

2.1、dashboard

        dashboard命令用来查看当前系统的实时数据面板

参数:

参数名称参数说明
[i:]刷新实时数据的时间间隔 (ms),默认 5000ms
[n:]刷新实时数据的次数

使用说明:

dashboard

        间隔 10s 刷新一次 大盘信息 

    dashboard -i 10000

数据说明:

IDJava 级别的线程 ID(不能跟 jstack 中的 nativeID 一 一对应)。
NAME线程名
GROUP线程组名
PRIORITY线程优先级, 1~10 之间的数字,越大表示优先级越高
STATE线程的状态
CPU%线程的 cpu 使用率。比如采样间隔 1000ms,某个线程的增量 cpu 时间为 100ms,则 cpu 使用率=100/1000=10%
DELTA_TIME上次采样之后线程运行增量 CPU 时间,数据格式为秒
TIME线程运行总 CPU 时间,数据格式为分:秒
INTERRUPTED线程当前的中断位状态
DAEMON是否是 daemon 线程

JVM 内部线程

Java 8 之后支持获取 JVM 内部线程 CPU 时间,这些线程只有名称和 CPU 时间,没有 ID 及状态等信息(显示 ID 为-1)。 通过内部线程可以观测到 JVM 活动,如 GC、JIT 编译等占用 CPU 情况,方便了解 JVM 整体运行状况。

  • 当 JVM 堆(heap)/元数据(metaspace)空间不足或 OOM 时,可以看到 GC 线程的 CPU 占用率明显高于其他的线程。

  • 当执行trace/watch/tt/redefine等命令后,可以看到 JIT 线程活动变得更频繁。因为 JVM 热更新 class 字节码时清除了此 class 相关的 JIT 编译结果,需要重新编译。

JVM 内部线程包括下面几种:

  • JIT 编译线程: 如 C1 CompilerThread0, C2 CompilerThread0

  • GC 线程: 如GC Thread0, G1 Young RemSet Sampling

  • 其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread

2.2、thread

        查看当前线程信息,查看线程的堆栈

参数:

参数名称参数说明
id线程 id
[n:]指定最忙的前 N 个线程并打印堆栈
[b]找出当前阻塞其他线程的线程
[i <value>]指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200
[--all]显示所有匹配的线程

 使用说明: 

        显示当前线程 

    thread

         展示当前最忙的前 N 个线程并打印堆栈

    thread -n 3

        显示所有匹配的线程(和 thread 命令一样)

    thread --all

        thread id, 显示指定线程的运行堆栈(main 线程的线程id为1)

    thread 1

        thread -i:指定采样时间间隔

  •         thread -i 1000:统计最近 1000ms 内的线程 CPU 时间。
  •         thread -n 3 -i 1000:列出 1000ms 内最忙的 3 个线程栈

        

        thread --state:查看指定状态的线程,查看运行时状态的线程 

    thread --state RUNNABLE

  

查看当前阻塞其他线程的线程(运行死锁的案例可以查看死锁的线程)

    thread -b

2.3、jvm

        查看当前 JVM 的信息

使用说明:

        查看 JVM 信息

    jvm

  

数据说明:

THREAD 相关:

COUNTJVM 当前活跃的线程数
DAEMON-COUNTJVM 当前活跃的守护线程数
PEAK-COUNT从 JVM 启动开始曾经活着的最大线程数
STARTED-COUNT从 JVM 启动开始总共启动过的线程次数
DEADLOCK-COUNTJVM 当前死锁的线程数

 文件描述符相关:

MAX-FILE-DESCRIPTOR-COUNTJVM 进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNTJVM 当前打开的文件描述符数

2.4、memory

        查看 JVM 内存信息。

使用说明:

    memory

 数据说明:

heap堆大小
ps_eden_spaceEden 区大小
ps_survivor_spaceSurvivor 区大小
ps_old_gen老年代大小
nonheap非堆大小
code_cache代码缓存
metaspace元空间大小
compressed_class_space压缩类空间
direct直接内存
mapped内存映射

2.5、vmoption

        查看,更新 VM 诊断相关的参数

使用说明:

        查看所有的 option

    vmoption

        说明:

        ORIGIN:DEFAULT 表示是默认值,MANAGEMENT 表示修改过的值。

        WRITEABLE:true 表示可以修改,false表示不可以修改。

        查看指定的 option,查看起始堆大小和最大堆大小

    vmoption InitialHeapSize

    vmoption MaxHeapSize

        更新指定的 option( WRITEABLE 为 true 的可以修改)

    vmoption PrintGC

    vmoption PrintGC true

2.6、vmtool

2.7、heapdump

2.8、getstatic(不推荐,推荐 ongl)

        通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name。

        查看 arthas 官方的 demo 中的 MatchGame。

2.9、ongl

2.10、sysprop(不常用)

        查看当前 JVM 的系统属性

使用说明:

        查看当前 JVM 的系统属性

    sysprop

         查看单个属性

    sysprop java.version

         修改单个属性

[arthas@5232]$ sysprop user.country
 KEY                    VALUE
-----------------------------------------------------------------------------------------
 user.country           CN
[arthas@5232]$ sysprop user.country US
Successfully changed the system property.
 KEY                    VALUE
-------------------------------------------------------------------------------------------
 user.country           US

        通过tab自动提示和补全

2.11、sysenv(不常用)

        查看当前 JVM 的环境属性。

使用说明:

    sysenv

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

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

相关文章

【Android春招】Android基础day2

一、填空题 1&#xff0e;除了开启开发者选项之外&#xff0c;还需打开手机上的 _ 开关&#xff0c;然后才能在手机上调试App。 USB调试 2&#xff0e;App开发的两大技术路线包括 _和混合开发。 原生开发 3&#xff0e;App工程的编译配置文件名为 _。 build.gradle 4&#xff0…

挂载光盘,配置yum源并且安装http软件包 ansible(4)

目录 一、挂载本地光盘到/mnt 二、配置yum源 一、挂载本地光盘到/mnt 第一步&#xff1a; 使用mount模块 注&#xff1a;fstype代表文件格式 二、配置yum源 第一种方法&#xff1a; 使用yum_repository模块 检验是否有对应文件在受控主机node1受控主机&#xff1a;node2受控…

Zipkin数据持久化配置

上一篇我们了解了Zipkin的基础知识以及Zipkin的服务端搭建。 在使用过程中很多同学发现了他的秘密&#xff0c;Zipkin模式将数据保存在内存中&#xff0c;当我们重启后&#xff0c;追踪数据便会丢失。其实&#xff0c;Zipkin也支持将追踪数据保存到MySql或者ES中。 持久化到M…

大数据基础平台搭建-(四)HBbase集群HA+Zookeeper搭建

大数据基础平台搭建-&#xff08;四&#xff09;HBbase集群HAZookeeper搭建 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 3、大数据基础平台搭建-&#xf…

Linux学习笔记——Nginx安装部署

5.3、Nginx安装部署 5.3.1、简介 Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 同Tomcat一样&#xff0c;Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务&#xff0c;同时也可以作为…

二十七、Docker (3)

&#x1f33b;&#x1f33b; 目录一、java开发者Docker常用镜像容器创建&#xff08;本地&#xff09;1.1 资源上传1.2 还原部署1.2.1 部署jdk1.2.2 部署tomcat1.2.3 部署nginx1.2.4 部署mysql二、java开发者Docker常用镜像容器创建(官网拉取)2.1 jdk部署2.1.1 拉取jdk镜像2.1.…

verilog学习笔记- 7)verilog程序框架

目录 注释&#xff1a; 关键字&#xff1a; Verilog常用的关键字&#xff1a; 程序框架&#xff1a; 注释&#xff1a; Verilog HDL 中有两种注释的方式&#xff0c;一种是以“/*”符号开始&#xff0c;“*/”结束&#xff0c;在两个符号之间的语句都 是注释语句&#xff…

7-10 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输出格式&#xff1a; 对每一对需要计算的集合&…

DaVinci:键 - 键混合器

调色页面&#xff1a;键Color&#xff1a;Key当选中一个键混合器节点时&#xff0c;键 Key调板上对应显示键混合器 Key Mixer的相关选项。键混合器节点默认有两个输入链接。可在键混合器节点上右击选择“添加”或“移除”一个输入。所有的输入链接和惟一的输出链接均可在键调板…

Elasticsearch在各大互联网公司大量真实的应用案例

国内现在有大量的公司都在使用 Elasticsearch&#xff0c;包括携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。 除了搜索之外&#xff0c;结合Kibana、Logstash、Beats&#xff0c;Elastic Stack还被广泛运用在大数据近实时分析领域&#xff0c;包括日志分…

SQL如何在数据库中执行

数据库的服务端&#xff0c;可分为执行器(Execution Engine) 和 存储引擎(Storage Engine) 两部分&#xff1a; 执行器负责解析SQL执行查询存储引擎负责保存数据 1 SQL如何在执行器中执行 # 查询用户ID大于50的用户的所有订单 SELECT u.id AS user_id, u.name AS user_name,…

详解回调函数

目录 前言 一、 实现一个简单的计算器 1.1 - 代码一 1.2 - 代码二 二、qsort 函数的介绍 三、改进冒泡排序函数 前言 回调函数就是一个通过函数指针调用的函数。如果把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其…

微信公众号调用扫一扫功能

手把手教你调用微信扫一扫&#xff0c;三分钟包会_前端人的博客-CSDN博客_调用微信扫一扫 第一次搞公众号&#xff0c;还以为跟上回调用企业微信扫一扫一样。。。调起扫一扫功能的过程自然是不同的&#xff0c;要注意的地方还挺多&#xff0c;记录一下 。 其实&#xff0c;在使…

2023最新网络安全自学路线,内容涵盖3-5年技能提升

前言 先预祝大家新年快乐&#xff01; 【一一帮助网络安全入门和提升点这里一一】 01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究…

改进MBR(操作显卡来输出字符)

文章目录前言前置知识mbr.S代码实验操作前言 本博客记录《操作系统真象还原》第二章第一个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;在屏幕上打印字符串【采用的方式是直接修改显存实现】 实验原因&#xff1a;mb…

Flutter性能优化

原理 Flutter的架构主要分成三层&#xff1a;Framework&#xff0c;Engine和Embedder Framework 使用 dart 实现&#xff0c;包括 Material Design 风格的Widget&#xff0c;Cupertino(针对iOS)风格的Widgets&#xff0c;UI/文本/图片/按钮等基础 Widgets&#xff0c;渲染&…

设计模式学习(一):Bridge桥接模式

一、什么是Bridge模式Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。1.1 类的功能层次结构主要作用就是增加新的功能。当我们要增加新的功能时&#xff0c;我们可以从各个层次的类中找出最符合自己需求的类&#xff0c;然后以它为父类编写子类…

(Week 10)最小生成树(C++,prim,Kruskal,并查集)

文章目录Einstein学画画&#xff08;C&#xff0c;欧拉路&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;并查集&#xff08;C&#xff09;[蓝桥杯 2017 国 C] 合根植物&#xff08;C&#xff0c;并查集&#xff09;题目描述输入格…

基于Java+SpringBoot+vue+element实现校园闲置物品交易网站

基于JavaSpringBootvueelement实现校园闲置物品交易网站 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSpri…

Element UI 走马灯的使用

目录 走马灯是什么 原生js实现 Element UI的走马灯使用 el-carousel Carousel Events el-carousel-item 走马灯是什么 在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容&#xff0c;走马灯也叫轮播图。 比如 原生js实现 JS实现轮播图效果&#xff08;同时…