JDK的bin下的工具有哪些功能

Java生产环境下问题排查

Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息

Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析

Java内存泄漏分析系列之三:jstat命令的使用及VM Thread分析

Java内存泄漏分析系列之四:jstack生成的Thread Dump日志线程状态

Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析

Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用

查看JVM参数

jps -l 查看所有正在运行的Java程序,同时显示启动类类名,获取到PID

4706 org.apache.catalina.startup.Bootstrap
5023 sun.tools.jps.Jps

jinfo -flags PID 查看运行时进程参数与JVM参数

Attaching to process ID 28987, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=132120576 -XX:MaxHeapSize=2092957696 -XX:MaxNewSize=697303040 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44040192 -XX:OldSize=88080384 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line:  -Dspring.config.location=application.properties -Dspring.profiles.active=staging

java -XX:+PrintFlagsFinal -version 查看当前虚拟机默认JVM参数

查看即时GC状态

jstat -gc PID 1000 10 每秒查看一次gc信息,共10次

输出比较多的参数,每个字段的解释参看 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
512.0  512.0   15.3   0.0    4416.0   1055.2   11372.0     7572.5   14720.0 14322.5 1664.0 1522.8     40    0.137   8      0.039    0.176

期间可能碰到提示sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.181-b01. Target VM is 25.171-b11的问题,原因在于安装了多个版本,使用whichls -l可简介定位到与当前执行Java程序相同的Java版本

内存问题

内存泄露导致OOM?内存占用异常的高?这是生产环境常常出现的问题,Java提供dump文件供我们对内存里发生过的事情进行了记录,我们需要借助一些工具从中获取有价值的信息。

导出Dump文件

  1. 提前对Java程序加上这些参数印dump文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
  2. 对正在运行的程序使用jmapjmap -dump:format=b,file=heap.hprof PID

分析Dump文件

如果Dump文件不太大的话,可以传到 http://heaphero.io/index.jsp 来分析

文件比较大,且想进行更加系统的分析,推荐使用MAT分析,有如下几种常用查看方式

  1. 首页中的【Leak Suspects】能推测出问题所在
  2. 点击【Create a histogram from an arbitrary set of objects】查到所有对象的数量
  3. 右键点击某个对象【Merge Shortest Paths to GC Roots】-> 【exclude all phantom/weak/soft etc. references】能查询到大量数量的某个对象是哪个GC ROOT引用的

线程问题

任务长时间不退出?CPU 负载过高?很可能因为死循环或者死锁,导致某些线程一直执行不被中断,但是不报错是最烦人的,所以日志里看不到错误信息,并且又不能用dump文件分析,因为跟内存无关。这个时候就需要用线程分析工具来帮我们了。

导出jstack文件

使用jstack PID > 文件,如果失败请加-F参数,如果还失败请使用Java程序启动时使用的用户执行jstack

排查步骤

  1. top 查看到哪个java程序负载高
  2. top -p PID -H 查看该进程所有进程的运行状态
  3. 记录下高负载的线程ID,printf "&x" PID转换成16进制
  4. jstack PID > 文件
  5. 在jstack文件中用转换成16进制之后的线程ID查询线程运行堆栈
  6. 从堆栈中了解到线程在执行什么任务,并结合业务与代码判断问题所在

以下转载自: http://www.codingwhy.com/view/858.html

Java开发人员肯定都知道JDK的bin目录中有“java”、“javac”这两个命令行工具,但并非所有的程序员都了解过JDK的bin目录之中的其他工具的作用。

这些工具被Sun公司作为“礼物”附赠给JDK的使用者,并在软件的使用说明中把他们申明为“没有技术支持并且是试验性质的(unsupported and experimental)”的产品,但事实上,这些工具都非常的稳定且功能强大,能在处理应用程序性能问题、定位故障时发挥很大的作用。

细心的可能会发现,这些工具都非常小,是因为这些工具大多是jdk/lib/tools.jar类库的一层包装而已,他们主要的功能代码是在tools类库中实现的。

Java故障检修,程序概要分析,监视和管理工具

工具名称 用途
jvisualvm 一个图形化的Java虚拟机 参考: Java jvisualvm简要说明
jconsole java监视台和管理控制台 参考: 如何利用 JConsole观察分析Java程序的运行,进行排错调优 https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/jconsole.html
jps JVM Process Status进程状态工具。列出目标系统的HotSpot JJVM 可以列出本机所有java进程的pid
jstat 按照命令行的具体要求记录和收集一个JVM的性能数据
jstatd JVM jstat 的守护进程
jmc Java任务控制工具(Java Mission Control),主要用于HotSpot JVM的生产时间监测、分析、诊断。

故障检测和修理工具

工具名称 用途
jinfo 配置或打印某个Java进程VM flag
jhat 堆储存查看器
jmap Java内存图
jsadebugd Java的 Serviceability Agent Debug的守护进程
jstack Java堆栈跟踪

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

基本工具

这些工具是JDK的基础,用这些工具来编写应用程序。

工具名称 用途
javac Java语言编译器
java Java应用程序启动器
javaw Java运行工具,用于运行.class字节码文件或.jar文件,但不会显示控制台输出信息,适用于运行图形化程序。
javadoc Java API文档生成器
apt java 注解处理器 「深入Java」Annotation注解
appletviewer java applet小程序查看器
jar java文件压缩打包工具
jdb Java调试器
javah C头文件和stub生成器,用于写本地化方法,例如生产JNI样式的头文件
javap class文件反编译工具
extcheck 用于检测jar包中的问题
jcmd Java命令行(Java Command),用于向正在运行的JVM发送诊断命令请求。

安全工具

这些工具用于设置系统的安全规则和生产可以工作在远端的安全规则下的应用程序

工具名称 用途
keytool 管理密钥库和证书
jarsigner 生产和校验JAR签名
policytool 有用户界面的规则管理工具
kinit 用于获得和缓存网络认证协议Kerberos 票证的授予票证
klist 凭据高速缓存和密钥表中的 Kerberos 显示条目
ktab 密钥和证书管理工具

Java国际化工具

这些工具可以帮助你创建可本地化的应用程序

native2ascii

远程方法调用工具

这些工具可以帮助创建可以和web和网络交互的应用程序

工具名称 用途
rmic 生成远程对象的stubs and skeletons(存根和框架)
rmid Java远程方法调用(RMI:Remote Method Invocation)活化系统守护进程
rmiregistry Java远程对象注册表
serialver 返回类的 serialVersionUID
java-rmi Java远程方法调用(Java Remote Method Invocation)工具,主要用于在客户机上调用远程服务器上的对象

Java IDL and RMI-IIOP 工具

这些工具用于创建使用OMG-Standard IDL 和 CORBA/IIOP 的应用程序

工具名称 用途
tnameserv Java IDL瞬时命名服
idlj 生产映射到OMG IDL接口可以使Java应用程序使用CORBA的.java文件
orbd 为客户可以在CORBA环境下透明的定位和调用服务器的稳定的对象提供支持
servertool 为应用程序提供易于使用的接口用于注册,注销,启动,关闭服务器

Java部署工具

工具名称 用途
pack200 使用java gzip压缩工具将JAR文件转换为压缩的pack200文件,生产打包文件是高度压缩的JAR包,可以直接部署,减少下载时间
unpack200 解包pack200文件为JARs

Java web工具

工具名称 用途
javaws Java web 启动命令行工具
schemagen Java构架的XML Schema生成器
wsgen 生成 JAX-WS
wsimport 生成 JAX-WS
xjc 绑定编译器

Java脚本工具

工具名称 用途
jrunscript 运行脚本

其他工具

工具名称 用途
jabswitch Java Access Bridge Switch的简称,用于控制Java访问桥的开/关。Java访问桥是一种技术,让Java应用程序实现Accessibility API,以供Microsoft Windows系统的辅助技术访问。
javafxpackager JavaFX打包工具
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容