jcmd的简单总结
jcmd的简单总结
背景
自从2019年公司转向java技术路线.
一直断断续续的在学习java相关的技术内容.
但是总感觉学的不是很深入.
这周比较累.也不想在学新东西了. 所以想着再总结一下jcmd相关的内容.
希望能够记住相关命令, 不需要在每次都百度
简要说明
jcmd等命令操作时需要能够attach到具体的具体的jvm的进程上面
所以建议使用与jvm运行的进程相同的java版本进行信息采集.
成功的概率更高一些.
建议可以讲运行时的java bin路径设置到 PATH环境变量中.便于快速进行相关命令操作
类似于:
export PATH=$PATH:/path/to/your/java/bin
展示进程
jcmd
会展示所有在运行的java进程,以及主类的目录
比如获取当前服务器的一个进程信息:
jcmd |grep caf-boot|head -n 1 |awk '{print $1}'
查看帮助
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` help
展示结果为:
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` help
24567:
The following commands are available:
VM.native_memory
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help
For more information about a specific command use 'help <command>'.
部分命令解释-VM
VM.xxxx
这个参数主要是获取java虚拟机的部分信息, 就类似于Windows的系统属性的相关内容.
获取的信息是静态信息. 可以查看系统的部分配置如堆区大小等. 可以对系统有一个简要的判断.
VM.native_memory
需要在启动脚本中添加部分配置 才可以进行展示, 之前讲述过不在过多描述.
VM.classloader_stats
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` VM.classloader_stats
可以通过如下命令检查查看 类加载器的信息
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` VM.classloader_stats |awk '{print $7}' |sort |uniq -c |sort -k1h
其他VM相关的命令
VM.uptime 启动时间
VM.dynlibs 启动加班的相关jar以及动态链接库等
VM.flags 查看启动的配置信息.
VM.system_properties 查看时区,版本,脚本语言字符集等.
VM.command_line 启动脚本等信息
VM.version 启动的jdk版本等信息
部分命令解释-GC
GC.xxx
主要是获取java进程运行时的垃圾回收的情况.
可以用于分析环境的异常情况.
需要注意类似的命令都会展示 安全点, 会STW影响系统的响应.
GC.class_stats
需要开启部分参数
GC.class_stats command requires -XX:+UnlockDiagnosticVMOptions
GC.class_histogram
直方图
可以使用如下命令存储
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` GC.class_histogram > zhaobsh.class_histogram
GC.heap_info
堆区信息
如果查看经常 99%的老年代和新年代 有可能的问题是:
1. 内存泄露
2. 内存不够
3. 分配不均
4. 创建大内存对象,没有直接升级到老年代.
GC.heap_dump
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` GC.heap_dump /root/zhaobsh202303051941.dump
可以直接抓取dump文件
感觉应该是最简单的命令了.
跟jmap 等命令比起来要简单很多.
注意如果文件名不带路径的话可能会到 jcmd 挂载的进程的workdirectory里面去形成.
部分命令解释-thread
Thread.print
可以查看具体堆信息
可以通过
top -Hp `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` -bn 1 里面的CPU使用与
jcmd `jcmd |grep caf-boot|head -n 1 |awk '{print $1}'` Thread.print 进行对照
发现有异常的堆栈信息.
部分命令解释-PerfCounter.print
很奇怪的是帮助里面没有
PerfCounter.print
但是这个可以显示部分性能信息. 并且非常全面详实
但是里面我不太了解对象的单位信息.
可以看到 创建的线程数量等信息. 以及最高值等.
java.threads.daemon=48
java.threads.live=302
java.threads.livePeak=350
java.threads.started=2371
具体的情况需要在学习和研究一下.
jcmd的简单总结的更多相关文章
- jcmd的简单实用
命令jcmd 显示所有java进程id及相关信息 命令 jcmd java_pid help 显示某个java进程的所有可用命令 ➜ jobs jcmd 61185 help 61185: The f ...
- jcmd命令实战
继续来根据之前的那篇infoq的文章的介绍熟悉工具,上一次咱们学习使用了: 接下来学习它里面提到的另一个工具: jcmd是一个非常之强大的命令行工具,能输出很多很多的信息,也是在处理JVM的一些问题经 ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
随机推荐
- 神经网络基础篇:详解导数(Derivatives)
导数 一个函数\(f(a)=3a\),它是一条直线.下面来简单理解下导数.让 看看函数中几个点,假定\(a=2\),那么\(f(a)\)是\(a\)的3倍等于6,也就是说如果\(a=2\),那么函数\ ...
- LiteOS内核源码分析:任务栈信息
摘要:LiteOS任务栈是高地址向低地址生长的递减栈,栈指针指向即将入栈的元素位置. 我们介绍下LiteOS任务栈的基础概念.LiteOS任务栈是高地址向低地址生长的递减栈,栈指针指向即将入栈的元素位 ...
- 华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比
摘要: 高斯Redis,兼具开源Redis和HBase各自优点,提供成本更低.性能更好.灵活性更强的数据库服务! 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis)揭秘 ...
- AI如何提升10倍筛药效率?6月18日华为云携手中科院上海药物所揭开谜底
摘要:6月18日,华为云TechWave全球技术峰会(人工智能&数据)围绕人工智能.大数据.数据库.华为云Stack等热点话题,携手来自全球的IT精英.技术大咖.先锋企业.合作伙伴共话前沿技术 ...
- 火出边际的Serverless,你居然还不了解?
摘要:图灵奖获得者David A. Patterson和Spark共同创始人Ion Stoica,在19年伯克利的会议上发布Serverless将是下一代默认的计算范式. 本文分享自华为云社区< ...
- 在Linux(CentOS7)服务器上安装Java的JDK
一.介绍 最近,我在做有关CI/CD的测试,真是一步一个坑啊,碰得我头破血流,这么难得的经验,必须记录下来,以防以后想找却找不到.说道CI/CD最好的工具,大家肯定是一致推荐Jenkins,对了,我现 ...
- 火山引擎 DataLeap 构建Data Catalog系统的实践(一):背景与调研思路
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 Data Catalog 产品,通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解 ...
- Solon2 接口开发: 实战 Gateway 模式效果
1.效果预览 网关 @Mapping("/api/v3/app/**") @Component public class ApiGateway3x extends UapiGate ...
- C++11实用特性2
1 可调用对象包装器.绑定器 1可调用对象 C++中的可调用对象分为四类: 函数指针: 任何一个函数都可以抽象成一个函数指针 int print(int a, double b) { cout < ...
- 在WPF应用中使用FastReport.WPF报表模块
FastReport是一个非常不错的报表组件,在Winform应用中常常使用它进行报表的设计.预览展现.打印或者导出文件(PDF.Excel)等,可以设计打印各种各样的报表,本篇随笔继续介绍当前最新的 ...