1.简介

Java开发的应用程序在线上出现生产故障很常见,通常我们会在开发环境模拟此类故障,但偶尔也会遇到无法成功模拟的故障。那么我们就需要在生产环境上进行分析,定位故障产生原因。JDK1.7版本之后新增了一个命令行工具jcmd,那么下面我们就使用jcmd来定位生产故障吧。

2.命令介绍

2.1获取所有的JVM

首先,我们可以通过jcmd获取所有的JVM列表。

>jcmd

直接输入jcmd,就能列出所有运行中的JVM。

7796

8404

7592

1228 sun.tools.jcmd.JCmd

7628 org.jetbrains.idea.maven.server.RemoteMavenServer

通过命令,可以查看到总共有5个JVM正在运行中。

2.2查看jcmd支持的命令

>jcmd help

7628:

The following commands are available:

VM.native_memory

ManagementAgent.stop

ManagementAgent.start_local

ManagementAgent.start

GC.rotate_log

Thread.print

GC.class_stats

GC.class_histogram

GC.heap_dump

GC.run_finalization

GC.run

VM.uptime

VM.flags

VM.system_properties

VM.command_line

VM.version

help

For more information about a specific command use 'help '.

如果需要对特定的命令进行帮助说明,可以在help之后加上命令名。

>jcmd 7628 help VM.version

7628:

VM.version

Print JVM version info

Impact: Low

Permission: java.util.

Syntax: VM.version

包含了命令的含义、影响、权限、语法等信息。

2.3生成堆dump

很多时候我们需要生成dump,再使用特定工具去详细进行分析(例如VisualVm)。

>jcmd 7628 GC.heap_dump filepath

通过上述命令可以生成相应的堆dump。

GC.heap_dump

Generate a HPROF format dump of the Java heap.

Impact: High: Depends on Java heap size and content. Request a full GC unless the '-all' option is specified.

Permission:

java.lang.management.ManagementPermission(monitor)

Syntax : GC.heap_dump [options]

Arguments:

filename : Name of the dump file (STRING, no default value)

Options: (options must be specified using the or = syntax)

-all : [optional] Dump all objects, including unreachable objects (BOOLEAN, false)

通过帮助手册可以查看到,生成HPROF格式的堆dump,可以指定-all命令就能dump所有的对象,包括那些无法到达的对象。

命令指定的路径是相对于JVM运行的当前路径,所以最好还是指定一个全路径。

Dump生成之后就可以使用VisualVM等工具进行分析了,详细的分析流程在后续会陆续讲到。

可能很多小伙伴使用过jmap工具,也一样可以生成dump文件,不过未来版本可能会被去掉,Oracle官方也建议使用jcmd。

2.4生成类直方图

类直方图是一个较为直观的状态去查看内存分布的情况。

>jcmd GC.class_histogram

num #instances #bytes class name

----------------------------------------------

1: 5923 5976952 [I

2: 50034 4127704 [C

3: 49465 1187160 java.lang.String

4: 188 1069496 [J

5: 3985 1067240 [Ljava.util.HashMap$Node;

6: 8756 982872 java.lang.Class

7: 2855 835792 [B

8: 23570 754240 java.util.HashMap$Node

9: 13964 671440 [Ljava.lang.Object;

10: 9642 308544 java.util.Hashtable$Entry

11: 4453 213744 java.util.HashMap

上述对象描述的只是类自身大小,不包含子对象。上图中String底层实现使用到了char[],但是很明显char[]并未比String大多少。

2.5打印线程状态

有时候我们的应用程序会产生死锁或者频繁争抢资源的情况,那么就可以通过打印线程状态来详细分析各个线程的执行状态。

jstack

jcmd Thread.print

3.总结

我们对jcmd有了一个直观的认识,下面的文章中将会对各种线上故障通过jcmd进行一一解决。

java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍相关推荐

  1. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  4. java界面 文件选择器_掌握java技术 必备java工具应用知识

    在现如今的互联网时代里,Java无疑是一种极为流行的开发语言,无论是程序界还是整个互联网行业势必带来很大的影响.不管是人才需求还是薪资水平上,Java的发展前景都是很乐观的.关于Java的一些常用的工 ...

  5. java 判断二级网址_【Java】利用正則表達式推断是否为网址

    本文与<[JavaScript]利用正則表達式检查输入框输入的是否为网址>(点击打开链接)为姊妹篇,在上文中已经提到了,正則表達式在各个程序是通用的,这里不再解说正則表達式的详细使用方法. ...

  6. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  7. 滴滴java开发面试题_滴滴java开发工程师面试问题解答(第一回)

    有位同学写了一个滴滴面试拿offer的经历,据说还面了滴滴的CTO,我就好奇,这CTO面又能是个啥水平呢?对他在文章中提到的部分问题做个解答吧. 原文请见滴滴CTO五轮面试真是太刺激了,Java高级工 ...

  8. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  9. java 栈的用法_让Java程序员再次生机勃勃,还是技术的力量

    大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java真的还是之前那么好吗?答案是肯定的. 下面给大家分享一 ...

最新文章

  1. Java知多少(87)选择框和单选按钮(转)
  2. [转载]MongoDB开发学习 经典入门
  3. 实现简约不简单的vuex
  4. 【二分】【SPFA】架设电话线(jzoj 2132)
  5. httplistener java_Java监听器Listener使用详解
  6. python与txt文件查找,在Python中搜索TXT文件
  7. 为什么恢复后的文件打不开?U盘数据恢复常见问题
  8. 联想Y7000安装显卡驱动
  9. java计算机毕业设计水果商城设计MyBatis+系统+LW文档+源码+调试部署
  10. Linux服务器入侵预防与问题排查
  11. 前端开发工程师就业时应该选择大公司还是小公司?这是我听过最靠谱的答案!
  12. Linking two modules of different target triples:
  13. 【Day27 文献泛读】物体位置与空间关系的心理表征
  14. 计算机应用基础18春在线作业2,计算机应用基础19春在线作业2答案
  15. java基本微信小程序的琴房预约管理系统 uniapp 小程序
  16. 如何把Ai绘画工具放到我们的App中
  17. 微信小程序之网易云音乐小案例
  18. 机顶盒CM311-1a的EMMC各分区范围
  19. 《编外知识》之“幸存者偏差”
  20. SIGPIPE信号详解

热门文章

  1. 关于IO模拟时序(SPI)的注意事项
  2. 完全背包问题 POJ1384
  3. 通过WebRTC实现实时视频通信(三)
  4. QT中文显示乱码解决
  5. Windows应用程序类型和相应的入口点函数
  6. 计算机无法查找新硬件,电脑弹出新硬件向导怎么办_win7开机显示找到新的硬件向导的解决方法...
  7. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库
  8. mysql设置定时入伍_mysql 集群自动化配置
  9. html pc vw过大,细说em/rem/vh/vw与响应式布局
  10. mfc作为服务端,android作为客服端进行socket通讯,android在wifi下手机与电脑的socket通信...