摘要:一问一答的模式轻松学习把握java工具。

以一问一答的模式学习java工具

Q:查看内存泄露的工具有?
A: jmap生成dump转储文件,jhat可视化查看。

Q:某过程CPU使用率始终占满,用什么工具能够排查?
A:
top -Hp pid找到最占CPU的线程
而后jstack来查找那个线程此时所处的堆栈,确定问题产生地位。

§ 各工具具体介绍

§ jstack

全称: JVM Stack Trance
作用: 查看某个java过程的堆栈状况, 可用于确认死锁、IO期待、死循环等问题。
命令用法:

  • jstack pid
  • 查看死锁例子如下图,找到wait的lock和已被锁的lock

  • 查看期待IO例子:

§ jstat

全称:
作用:
查看过程中内存应用状况,但只能给出一些简略统计数据

  • 统计加载了多少类以及占用空间 jstat -class pid
  • 统计编译了多少文件 jstat -compiler 10

Q: jstat -gcutil {pid} 2000 能够每隔2秒,对pid过程打印内存应用统计信息。
gcutil的输入如下

外面哪个百分比如果长期处于99%-100%会有OMM危险?(OutOfMemoryError)
A:
如果E和O即新生代、老年代内存区始终都处于满的状态,则很有可能会引发OMM危险。就像上面这个。

§ jmap

全称: JVM Memory Map
作用:生成过程的内存堆快照
当须要看一下过程里是什么货色占用了过多内存时, 能够用jmap打印一下堆快照。
命令用法:

  • 打印堆快照: jmap -dump:file=./dumpfile.dump 过程pid
  • 查看特定类所占用的状况: jmap -histo:live 过程pid | grep 类名

Q: 用jmap查看内存透露实例
我分了3次,每个1h调用jmap查看过程的内存实例,查看该时刻各对象数量
第一次查看状况如下:

第二次隔了2各小时,查看状况如下:

请问哪个对象可能有内存透露危险?
A:
ObjectA可能有泄露, 因为他的对象数量减少最快,阐明对象始终在减少且很多无奈进行gc开释。

§ jhat

全称: JVM Heap Analysis Tool
和jmap配合, 能够解析jmap生成的堆快照, 反对生成1个web过程供咱们剖析和查看。
命令用法:

  • jhat -J-Xmx515M dumpfile.dump
    此时就会启动1个webServer,而后咱们去拜访就行了

§ jdb

全称:Java Debugger
作用:用来对core文件和正在运行的Java过程进行实时地调试,相似于c++里的gdb
常见用法:

  • 启动过程并调试: jdb -classpath . Test
  • 至二级调试某过程: jdb -attach 8000 -sourcepath /Users/wefit/Development/study/java/jtest/src/

§ jcmd

作用:多功能的工具,能够用它来导出堆、查看Java过程、导出线程信息、执行GC、还能够进行采样剖析,能够了解为1个性能调优时用的工具。
常见命令:

  • 查看 以后机器上所有的 jvm 过程信息: jcmd -l
  • 查看指定过程的性能统计信息: jcmd pid PerfCounter.print
  • 列出以后运行的 java 过程能够执行的操作: jcmd PID help
  • 查看线程堆栈信息: jcmd PID Thread.print
  • 查看堆内存信息: jcmd PID GC.heap_dump FILE_NAME

§ jps

简略记法: JVM process status
全名:Java Virtual Machine Process Status Tool
作用: 显示 以后零碎用户 的 所有 Java过程状况及其过程号
常用命令:

  • 查看过程jvm参数: jps -v
  • 输入程序main class的残缺package名或程序的jar文件残缺路径名: jps -l
  • 输入传递给main办法的参数: jps -m

§ jinfo

jvm infomation
作用:和jps性能相似, 然而反对依据指定pis查看指定过程

  • 能够查看JVM参数、零碎参数、调整jvm参数
  • 但不反对查看java程序的内存应用状况

§ javap

把java字节码文件反汇编为Java源码文件。

§ javac

java编译工具
javac的执行过程:

§ JDK可视化工具

§ jconsole

可监控jvm,即可监控本地jvm也可监控近程jvm,管理应用程序,能够查看死锁等诸多问题。

§ jvisualvm

Q:

  • jvisualvm能够监控近程服务器的运行状态
  • 能够在java程序运行起来后再运行, 通过某些协定连贯到java过程中。
  • 运行时, 能够不须要配置配置环境、虚拟机参数等。

点击关注,第一工夫理解华为云陈腐技术~