当前位置: 首页 > news >正文

JVM常见排查问题的命令及可视化工具

前置:

RMI协议:java的一个远程调用协议,在不同的JVM之间可以进行接口的调用,但数据不安全,且仅限java;

一、常见命令及用法

1、jps:与Linux的ps命令有点类似,查看系统中在运行的Java程序,并打印main方法所在类名和PID进程号;主要选项参数:

-m:输出启动时传递给main函数的参数

-v:输出启动时JVM的参数

2、jstat:监视运行中的JVM状态信息,包含类加载的信息,内存、垃圾回收、即时编译信息(当使用动态代理时,会在运行过程中实时的产生Class对象);

可以查看本地的,也可以通过RMI协议查看远程的;

在运行中的JVM,没有可视化图形工具的时候常用;

命令格式:

本地:jstat    option    interval      count

如:jstat   -gc   1027    1000    10   表示打印1027那个进程的垃圾回收信息,每1000毫秒打印一次,总共打印10次,省略interval和count表示只打印一次;只省略count表示在间隔时间内一直打印,interval的单位是毫秒;

远程:jstat   option    协议RMI://lvmid @远程机器的hostname:端口/servername

如:jstat   -gc   RMI://1027@192.168.1.1:8080/HelloJVM

主要选项参数:主要包含三大类:类加载、垃圾回收和即时编译情况

-gc:表示打印gc信息

-class:表示打印类加载和卸载,空间和耗时等信息

-gccause:导致上一次GC的原因

-compiler:即时编译过的方法、耗时等;

3、jmap:生成堆转储文件(heapdump或dump文件)

备注:生成堆转储快照也可以通过设置参数的方式进行,比如设置

+XX:HeapDumpOnOutOfMemaryError:在出现内存溢出异常的时候在当前工程目录下,生成堆转储快照,这种是比较暴力的做法,一般在生产环境上不用,因为生成快照是比较耗时的,会影响系统整个运行,一般在测试环境或者压力测试的时候用;

也可以通过+XX:HeapDumPath=path来指定生成堆文件的路径

jmap生成堆转储快照:

jmap  -dump   pid

jmap  -heap  pid:生成堆详细信息,比如垃圾回收器,参数配置等,但只在Linux下有限,Windows下无效;

jmap  -F:当已经发生内存溢出,同时使用jmap  -dump无响应时,使用-F强制生成堆文件

jmap  -histo:统计对象信息,包括类、实例数量等,可以查看哪个对象分配最多导致内存溢出;

4、jstack:生成当前时刻JVM的线程快照,线程快照是指每一条线程正在执行的那个方法的堆栈信息;当某个线程出现长时间卡顿时,需要使用该命令进行定位,比如出现请求外部资源未响应导致一直等待,死循环,深度递归调用,死锁等;

格式:jstack   option   pid

jstack  -F:强制生成线程快照信息

jstack   -l:显示锁的附加信息;

5、jhat:与jmap配合使用,在JVM内部内置了一个微型的web服务器,用来分析jmap转储的堆文件快照,除非在完全依赖线上的环境上,否则一般不使用jhat来分析堆文件,因为功能相对简陋,且加载堆文件比dump堆文件更耗内存,可以下载到本地使用VisualVM可视化工具进行分析;

6、jinfo:查看JVM的一些显示指定和非显示指定的参数,也可以对这些参数进行修改

jinfo   -flag:查询默认的那些参数值

二、JDK自带可视化工具

1、JConsole

2、VisualVM:

对JVM实际性能影响较小,相比于其他可视化工具,它可以使用在生产环境中排查问题;

支持插件安装,可以扩展功能;

3、Mission Control

三、其他第三方可视化工具

1、阿里的Arthas

http://www.lryc.cn/news/512393.html

相关文章:

  • 【python】matplotlib(moon cake)
  • Pytorch使用手册-空间变换网络指南(专题十五)
  • Vue 中el-table-column 进行循环,页面没渲染成功
  • 基于单片机的温湿度采集系统(论文+源码)
  • 使用envoyfilter添加请求头
  • kafka开机自启失败问题处理
  • 优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变
  • git clone 和 conda 换源
  • 人工智能及深度学习的一些题目(二)
  • 怎么在VMware Workstation上安装Win11虚拟机?
  • 协程原理 函数栈 有栈协程
  • SpringBoot整合springmvc、扩展springmvc
  • 免费部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型(简单5步实现,免费且比GPT4.0更好用)
  • 音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
  • 从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用
  • 修改表字段属性,SQL总结
  • go-xorm连接
  • Excel 面试 04 查找函数 XLOOKUP
  • Flannel和Calico之对比(Comparison between Flannel and Calico)
  • Spring Boot + Redisson 封装分布式锁
  • QWEN2 模型架构配置;GGUF的概念:实现量化存储
  • window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)
  • spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验
  • 实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制
  • mugen
  • CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决
  • 计算机网络 (16)数字链路层的几个共同问题
  • 细说STM32F407单片机通过IIC读写EEPROM 24C02
  • 【AimRT】现代机器人通信中间件 AimRT
  • Unity 读Excel,读取xlsx文件解决方案