Arthas-JVM相关命令使用

news2024/11/19 21:27:24

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

开头:
我们先说下生产使用频率较高的有哪些:dashboard、heapdump、jvm、memory、thread

文章目录

  • JVM相关命令的使用
    • dashboard
    • getstatic
    • heapdump
    • jvm
    • logger
      • 1、logger
      • 2、logger -c 31cefde0
      • 3、 logger -n org.springframework.web
      • 4、logger --name ROOT --level debug
      • 5、logger --include-no-appender
    • mbean
    • memory
    • ognl
    • perfcounter
    • sysenv
    • sysprop
    • thread
    • vmoption
    • vmtool
      • 1、vmtool --action getInstances --className java.lang.String --limit 10
      • 2、sc -d
      • 3、vmtool --action forceGc
      • 4、vmtool --action interruptThread -t [id]

JVM相关命令的使用

dashboard

这个命令是一个可视化的控制台,显示CPU、内存这些使用指标,已经一些线程的状态,算是一个使用频率相当高的命令,主要帮助我们初步查看是什么问题。

下面是使用截图:在这里插入图片描述

getstatic

这个命令是获取一个类的静态变量,该命令主要辅助我们线上定位某些静态的变量具体有什么值,帮助我们分析故障。
语法: getstatic [类的全限定名] [类中的变量名] [ognl表达式]
例子: getstatic com.pany.camp.arthas.Test map ‘entrySet().iterator.{? #this.key.name()==“a”}’

我写一个例子的代码,辅助理解这个命令。

package com.pany.camp.arthas;

import com.google.common.collect.Maps;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class Test {

    public static Map<String, String> map = Maps.newHashMap();

    static {
        map.put("a", "zhangsan");
        map.put("b", "lisi");
    }
}

下面是命令的使用截图,都可以打印类中的静态变量。
在这里插入图片描述

heapdump

这个命令是用来 dump 内存情况的,主要用来做内存分析的,定位内存溢出、内存泄露这类问题,线上使用一定注意内存的大小,不然 dump 的文件很大,也是很费时间的。而且有些重要的生产系统是禁止 dump 的,也是要注意的, dump 之前一般会做一次垃圾回收的动作。
这个命令类似于 Java 的 jmap 的 heap dump。

命令: heapdump [–live] [文件路径/文件名.hprof]
–live 是可选的,意思是打印有活跃引用的对象,丢弃进行垃圾回收的对象。

例子:heapdump --live /root/test/study-06-01.hprof

使用截图如下:在这里插入图片描述
在这里插入图片描述

导出的这个问题怎么分析呢?
可以通过 1、JProfiler 2、VisualVM 3、其他内存分析工具 进行内存分析。

jvm

这个命令主要是用来打印 jvm 相关信息的,使用也很简单。

语法: jvm

使用截图:
在这里插入图片描述
官网对字段也有描述:
THREAD 相关
COUNT: JVM 当前活跃的线程数
DAEMON-COUNT: JVM 当前活跃的守护线程数
PEAK-COUNT: 从 JVM 启动开始曾经活着的最大线程数
STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数
DEADLOCK-COUNT: JVM 当前死锁的线程数

文件描述符相关
MAX-FILE-DESCRIPTOR-COUNT:JVM 进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNT:JVM 当前打开的文件描述符数

logger

这个打印一些日志相关的信息,这个一般不常用。

命令: loggger [-c hashcode] [-n 包名] [–name 名称] [–level 日志级别]
这里有几种用法,我列举下:

1、logger

打印 logger 的信息
在这里插入图片描述

2、logger -c 31cefde0

根据 hashcode 打印信息,hashcode 可以用 sc -d yourClassName 来看 classloader hashcode。

在这里插入图片描述

用 sc -d yourClassName 来看 classloader hashcode
在这里插入图片描述

3、 logger -n org.springframework.web

根据包名去打印信息。
在这里插入图片描述

4、logger --name ROOT --level debug

如果我们是 war 包或者 jar 包这种启动的,需要指定 classloader,通过这个方式更新日志级别: logger -c 31cefde0 --level info

在这里插入图片描述

5、logger --include-no-appender

这个主要打印没有appender的 logger 的信息,这个不常用,主要打印信息非常长。
在这里插入图片描述

mbean

这个命令就是查看 Mbean 的信息,但是 mbean 是什么呢?
MBean 就是一种规范的 JavaBean,通过集成和实现一套标准的 Bean 接口,这种叫 MBean,Mbean 注册到 MBeanServer 中。

这个命令不常用,了解了解即可。
用法如下:
列出所有 Mbean 的名称:mbean
列出所有 Mbean 的名称:mbean -m java.lang:type=Threading
查看 mbean 属性信息:mbean java.lang:type=Threading
mbean 的 name 支持通配符匹配: mbean java.lang:type=Th*

memory

这个命令是查看 jvm 信息,这个看内存配置和使用情况的时候也会使用。

命令: memory

使用截图如下:
在这里插入图片描述

ognl

这个命令是 3.0.5 版本增加的,支持 ognl 表达式。

ognl 表达式的资料网址:
OGNL 特殊用法请参考: https://github.com/alibaba/arthas/issues/71
OGNL 表达式官方指南: https://commons.apache.org/proper/commons-ognl/language-guide.html

在这里插入图片描述

perfcounter

查看 jvm 的 Perf Counter 信息。 Perf Counter 是什么呢?
它是性能计数器,编译器用来优化代码的。

命令: perfcounter [-d]
-d 这个参数可选,加了能打印更多信息,这个命令也不常用。
在这里插入图片描述

sysenv

查看当前 JVM 的环境属性,基本上这个也很少用。

命令:sysenv
使用截图如下:
在这里插入图片描述

sysprop

查看当前 JVM 的系统属性,基本上这个也很少用。

命令:sysprop
使用截图如下:
在这里插入图片描述

thread

查看当前线程信息,查看线程的堆栈,这个命令属于常用命令。

命令使用如下(使用比较多的我都给加粗了):
thread 打印第一页线程信息
thread -n 5 打印 top5 繁忙的线程信息
thread --all 显示所有的线程
thread [id] 打印制定 id 的线程运行堆栈
thread -b 打印当前阻塞其他线程的线程
thread -i 1000 每过1000ms 统计一次线程信息
thread -n 5 -i 1000 每过1000ms 统计一次 top5 线程信息

thread -n 5
在这里插入图片描述
在这里插入图片描述

vmoption

查看,更新 VM 诊断相关的参数,这个命令偶尔也会用。

命令:vmoption [操作]
例如:vmoption 打印所有的操作
vmoption PrintGC 打印GC参数

使用截图如下:
在这里插入图片描述

在这里插入图片描述

vmtool

这个命令从 3.5.1 版本开始支持,利用 JVMTI 接口,实现查询内存对象,强制 GC 等功能,不常用。

举例几种用法:
获取 String 对象,limit 用来限制返回数量,防止返回太多。

1、vmtool --action getInstances --className java.lang.String --limit 10

在这里插入图片描述

2、sc -d

这个我们上面举例过,用来用户 classloader 的。
在这里插入图片描述

3、vmtool --action forceGc

动态的打开 PrintGC的开发,和 vmoption 一样可以操作改变参数。
在这里插入图片描述

4、vmtool --action interruptThread -t [id]

这个是用来 interrupt 指定线程,可以用来中断另一个线程。
例如: vmtool --action interruptThread -t 1

在这里插入图片描述

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

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

相关文章

【mqtt】MQTT安装与入门案例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍MQTT的c版本入门。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

java高频面试题

集合 前言 时间复杂度 时间复杂度是用来来评估代码的执行耗时的&#xff0c;大O表示法&#xff1a;不具体表示代码的真正执行时间&#xff0c;而是表示代码执行时间随数据规模增长的变化趋势。 当n很大时&#xff0c;低阶、常量、系数并不能影响其增长趋势&#xff0c;因此可以…

压缩感知重构之广义正交匹配追踪法

算法的重构是压缩感知中重要的一步&#xff0c;是压缩感知的关键之处。因为重构算法关系着信号能否精确重建&#xff0c;国内外的研究学者致力于压缩感知的信号重建&#xff0c;并且取得了很大的进展&#xff0c;提出了很多的重构算法&#xff0c;每种算法都各有自己的优缺点&a…

RFID在工业自动化产线工艺中的应用

RFID在工业自动化产线工艺中的应用 随着工业自动化技术的不断发展&#xff0c;RFID&#xff08;Radio Frequency Identification&#xff09;技术在自动化产线数据采集方面得到了广泛应用。RFID技术是一种通过电磁波进行无线通信和识别的技术&#xff0c;它可以对物品进行追踪…

电子器件系列39:反激式变压器

反激式(Flyback)变压器又称单端反激式或Buck-Boost转换器。因其输出端在原边绕组断开电源时获得能量故而得名。反激式变换器以其电路结构简单&#xff0c;成本低廉而深受广大开发工程师的喜爱。 反激式变压器适合小功率电源以及各种电源适配器。但是反激式变换器的设计难点是变…

Oracle中的数据导出(1)

目录 1、基本语法&#xff1a; 2、操作步骤 3、spool作用 SPOOL命令的使用 在 Oracle 中&#xff0c;SPOOL 是一条 SQLPLUS 命令&#xff0c;用于将执行 SQL 脚本的输出结果保存到指定文件中。SPOOL 命令可以帮助用户快速导出查询结果、生成报表等常见任务。 1、基本语法&…

压缩感知重构算法之正交匹配追踪算法(OMP)

算法的重构是压缩感知中重要的一步&#xff0c;是压缩感知的关键之处。因为重构算法关系着信号能否精确重建&#xff0c;国内外的研究学者致力于压缩感知的信号重建&#xff0c;并且取得了很大的进展&#xff0c;提出了很多的重构算法&#xff0c;每种算法都各有自己的优缺点&a…

java-面向对象

java-面向对象 面向对象 首先考虑事物中存在哪些对象&#xff0c;再建立对象与对象的关系 一、面向对象-&#xff08;类和对象&#xff09; 1.1类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性…

java-字符流和字节流(一)

java-字符流和字节流(一) 一、File类 1.1 File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言&#xff0c;其封装的并不是一个真正存在的文件&#xff0c;仅仅是一个路径名而已。它可以是存在的&#xff0c;也…

【C++ 程序设计】第 1 章:C++ 语言简介

目录 一、C 语言的发展简史 二、C 语言的特点 &#xff08;1&#xff09;基本的输入/输出 &#xff08;2&#xff09;头文件和命名空间 &#xff08;3&#xff09;强制类型转换运算符 &#xff08;4&#xff09;函数参数的默认值 &#xff08;5&#xff09;引用和函数…

超简单好看的HTML5七夕情人节表白网页(表白直接拿去用) HTML+CSS+JS

博主&#xff1a;命运之光 专栏&#xff1a;web开发&#xff08;html css js&#xff09; 目录 ✨简介&#xff1a; ✨前言&#xff1a; ✨视频展示 ✨源代码 ✨代码的使用方法&#xff08;超简单什么都不用下载&#xff09; &#x1f353;1.打开记事本 &#x1f353;2.将…

springboot+vue高校食堂点餐送餐配送系统

食堂送餐系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用java语言进行开发&#xff0c;结合最新流行的springboot框架。使用Mysql数据库和Eclipse/idea开发工具。该四川工商学院食堂送餐系统包括用户、商家、送餐员和管理员。其主要功能包括商家管理、用户管理…

【Azure】微软 Azure 基础解析(八)Azure 存储服务:Blob存储、队列存储、文件存储等特点与应用场景

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…

chatgpt赋能python:Python创建节点:简单易行的SEO优化技巧

Python创建节点&#xff1a;简单易行的SEO优化技巧 简介 在今天的数字时代&#xff0c;拥有强大在线存在感已经成为了非常重要的一种要素&#xff0c;而搜索引擎优化&#xff08;SEO&#xff09;就是其中重要的一环。优秀的SEO技巧不仅能够帮助网站吸引更多的访客&#xff0c…

chatgpt赋能python:Python编程实现高效的SEO搜索程序

Python编程实现高效的SEO搜索程序 在当今互联网时代&#xff0c;搜索引擎是人类获取信息的主要途径&#xff0c;而优化搜索引擎结果从而使自己的网站得到更多展示机会是一直以来网站优化重要的一环。Python语言以其简洁、高效、易学的特点&#xff0c;成为了编写高效SEO搜索程…

Linux 实操篇--定时任务调度

Linux 实操篇-定时任务调度 crond 任务调度 crontab 进行定时任务的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。 任务调度分类&#xff1a;1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作&#xff…

java-基础语法(二)

java-基础语法(二) 一、流程控制语句 1.1 流程控制语句分类 顺序结构 分支结构(if, switch) 循环 结构(for, while, do…while) 1.2 顺序结构 顺序结构执行流程图&#xff1a; 1.3 分支结构之if语句 if语句格式1 格式&#xff1a;if (关系表达式) {语句体; }执行流程&…

04.JavaWeb-Tomcat服务器+Maven

1.B/S架构 B/S架构即浏览器/服务器模式&#xff0c;他是对C/S架构的一种改进&#xff1b;与C/S架构相比B/S架构可以实现跨平台&#xff0c;客户端零维护&#xff0c;但是个性化能力低&#xff0c;响应速度较慢。 2.Tomcat服务器 Tomcat是一个用于运行Java Web应用程序的服务器&…

chatgpt赋能python:Python分解9位数的方法介绍

Python分解9位数的方法介绍 Python是一种广泛使用的编程语言&#xff0c;具有强大的功能和易于使用的语法。其中&#xff0c;分解一个9位数是一个常见的问题。在本篇文章中&#xff0c;将介绍如何用Python分解一个9位数。 分解9位数的方法 对于一个9位数&#xff0c;我们可以…