Arthas-JVM相关命令使用

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【连续介质力学】二阶张量的图像表示

二阶张量在特定方向的投影 法向和切向分量 二阶张量T投影到 n ^ \hat n n^方向的结果是 t ⃗ ( n ^ ) T ⋅ n ^ \vec t^{(\hat n)}T \cdot \hat n t (n^)T⋅n^&#xff0c;其中 t ⃗ ( n ^ ) \vec t^{(\hat n)} t (n^)可以分解成&#xff1a; t ⃗ ( n ^ ) T ⃗ N T ⃗ S…

2023年上半年系统规划与管理师上午真题及答案解析

1.香农用概率来定量描述信息的公式如下&#xff0c;其中H(x)表示X的( )&#xff0c;Pi是( )出现第i种状态的( )。 A.信息熵 事件 概率 B.总熵 单位 概率 C.信息熵 单位 概率 D.总熵 单位 度量 2.信息传输模型中&#xff0c;( )负责信息的向外传播&#xff0c;( )负责…

VSLAM视觉里程计总结

相机模型是理解视觉里程计之前的基础。视觉里程计&#xff08;VIO&#xff09;主要分为特征法和直接法。如果说特征点法关注的是像素的位置差&#xff0c;那么&#xff0c;直接法关注的则是像素的颜色差。特征点法通常会把图像抽象成特征点的集合&#xff0c;然后去缩小特征点之…

Android 应用快捷ShortcutManager与ShortcutManagerCompat详解与实战(二)

一、介绍 之前我已通过一篇文章介绍了应用快捷的接入与Demo。如果还未看过上一篇的文章可以先了解入门。 传送门&#xff1a;Android 应用快捷(shortcut)功能的详解(一)_蜗牛、Z的博客-CSDN博客 有创建自然就会有管理&#xff0c;否则一个完美的方案不应该这么被推荐出来。如何…

Zemax Lumerical | 二维光栅出瞳扩展系统优化(下)

简介 本文提出并演示了一种以二维光栅耦出的光瞳扩展&#xff08;EPE&#xff09;系统优化和公差分析的仿真方法。 在这个工作流程中&#xff0c;我们将使用3个软件进行不同的工作 &#xff0c;以实现优化系统的大目标。首先&#xff0c;我们使用 Lumerical 构建光栅模型并使用…

数据库实验报告--安全性实验

一、 实验目的 &#xff08;1&#xff09;理解SQL Server验证用户身份的过程&#xff0c;掌握设置身份验证模式的方法。 &#xff08;2&#xff09;理解登录账号的概念&#xff0c;掌握混合认证模式下登录账号的建立与取消方法。 &#xff08;3&#xff09;掌握混合认证模式…

Centos7中mysql安装配置

前提&#xff1a;先关闭防火墙或开启tcp的3306端口 1、查看服务器上是否有现成的安装包 yum list mysql* 2、去mysql官网的yum资源库找到对应的rpm文件的下载链接 确定系统版本 cat /etc/redhat-release 到mysql官网复制对应版本的资源下载链接 MySQL :: Download MySQL Yum…

git Husky

虽然我们已经要求项目使用eslint了&#xff0c;但是不能保证组员提交代码之前都将eslint中的问题解决掉了&#xff1a; 也就是我们希望保证代码仓库中的代码都是符合eslint规范的&#xff1b; 那么我们需要在组员执行 git commit 命令的时候对其进行校验&#xff0c;如果不符合…

说说验证码功能的实现

前言 大家好&#xff0c;我是 god23bin&#xff0c;今天说说验证码功能的实现&#xff0c;相信大家都经常接触到验证码的&#xff0c;毕竟平时上网也能遇到各种验证码&#xff0c;需要我们输入验证码进行验证我们是人类&#xff0c;而不是机器人。 验证码有多种类型&#xff…

项目中使用es(一):使用springboot操作elasticsearch

使用springboot操作es 写在前面搭建项目环境和选择合适版本具体的代码实现&#xff08;1&#xff09;继承ProductInfoRepository具体的代码实现&#xff08;2&#xff09;使用ElasticsearchRestTemplate操作问题总结最后放个demo 写在前面 对于elasticsearch的搭建&#xff0c…

5款提高工作效率的无广告软件

今天推荐一些可以大幅度提升办公效率的小软件&#xff0c;安全无毒&#xff0c;下载简单&#xff0c;最重要的是没有广告&#xff01; 1.照片处理——Darktable Darktable是一款用于处理和管理数码照片的工具。它可以让你对RAW格式的照片进行非破坏性的编辑,并提供多种模块和…

设计模式之~观察者模式

观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式。 观察者模式observer&#xff1a;定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使他们…

Linux系统下imx6ull QT编程—— C++构造函数、析构函数、this指针(四)

Linux QT编程 文章目录 Linux QT编程一、什么是构造函数&#xff1f;二、什么是析构函数&#xff1f;三、示例四、this指针 一、什么是构造函数&#xff1f; 构造函数在对象实例化时被系统自动调用&#xff0c;仅且调用一次。前面我们学过类&#xff0c;实际上定义类时&#x…

【Spring】— 动态SQL :<if>元素

动态SQL &#xff1a;元素 在MyBatis中&#xff0c;<if>元素是常用的判断语句&#xff0c;主要用于实现某些简单的条件选择。在实际应用中&#xff0c;我们可能会通过多个条件来精确地查询某个数据。 【示例8-1】下面通过一个具体的案例来演示元素的使用。 &#xff0…

基于RPC协议的接口自动化测试可以用Python语言实现

基于RPC协议的接口自动化测试可以用Python语言实现。下面是实现步骤&#xff1a; 1、安装依赖库&#xff0c;如protobuf、grpc。 2、编写.proto文件定义接口参数和返回值。 3、使用protoc编译.proto文件生成Python代码。 4、编写客户端代码调用远程接口进行测试。 具体实现…

数据结构与算法练习(三)二叉树

文章目录 1、树2、二叉树3、满二叉树4、完全二叉树5、二叉树的遍历&#xff08;前序、中序、后序&#xff09;二叉树删除节点或树 6、顺序存储二叉树顺序存储二叉树遍历&#xff08;前序、中序、后序&#xff09; 7、线索化二叉树中序线索二叉树前序线索二叉树后序线索二叉树 1…

悲观锁、乐观锁、自旋锁

悲观锁、乐观锁、自旋锁 &#xff08;1&#xff09;乐观锁 乐观锁是一种乐观的思想&#xff0c;即认为读多写少&#xff0c;遇到并发的可能性低&#xff0c;每次拿数据时都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有…

开源赋能 普惠未来|中软国际寄语 2023 开放原子全球开源峰会

中软国际作为行业领先的全球化软件与信息技术服务企业及数字化转型服务商&#xff0c;近年来积极布局开源生态&#xff08;OpenHarmony、openEuler&#xff09;、智能云、ERP、AIGC、教育科技、智能车六大赛道&#xff0c;加速业务转型创新。 中软国际为开放原子开源基金会白金…

力扣---二叉树OJ题(多种题型二叉树)

文章目录 前言&#x1f31f;一、剑指 Offer 55 - I. 二叉树的深度&#x1f30f;1.1 链接&#xff1a;&#x1f30f;1.2 代码一&#xff1a;&#x1f30f;1.3 代码二&#xff1a;&#x1f30f;1.4 流程图&#xff1a; &#x1f31f;二、100. 相同的树&#x1f30f;2.1 链接&…

【ChatGPT】ChatGPT快速生成短视频

1.chatGPT剪映 chatGPT生成文本后通过剪映图文成片 这次用了new bing&#xff1a;Chatbot AI 在线网页版 (atmob.cn) 打开剪映-图文成片 把new bing生成的文本粘贴过来&#xff0c;点击生成视频。 生成好了&#xff0c;是这样 剪映自动生成的&#xff0c;最后还是得手工改改&…