目前最流行的java开发工具(几款Java开发者必备常用工具)

​​​​​​​​​​​​​​​​​​​​​​​摘要:一问一答的形式轻松学习掌握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

目前最流行的java开发工具(几款Java开发者必备常用工具)(1)

查看等待IO例子:

目前最流行的java开发工具(几款Java开发者必备常用工具)(2)

jstat

全称:作用:查看进程中内存使用情况,但只能给出一些简单统计数据

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

Q:jstat -gcutil {pid} 2000 可以每隔2秒,对pid进程打印内存使用统计信息。

gcutil的输出如下

目前最流行的java开发工具(几款Java开发者必备常用工具)(3)

里面哪个百分比如果长期处于99%-100%会有OMM风险?(OutOfMemoryError)

A:如果E和O即新生代、老年代内存区一直都处于满的状态,则很有可能会引发OMM风险。就像下面这个。

目前最流行的java开发工具(几款Java开发者必备常用工具)(4)

jmap

全称: JVM Memory Map作用:生成进程的内存堆快照当需要看一下进程里是什么东西占用了过多内存时, 可以用jmap打印一下堆快照。命令用法:

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

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

目前最流行的java开发工具(几款Java开发者必备常用工具)(5)

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

目前最流行的java开发工具(几款Java开发者必备常用工具)(6)

请问哪个对象可能有内存泄漏风险?A:ObjectA可能有泄露, 因为他的对象数量增加最快,说明对象一直在增加且很多无法进行gc释放。

jhat

全称: JVM Heap Analysis Tool

和jmap配合, 可以解析jmap生成的堆快照, 支持生成1个web进程供我们分析和查看。

命令用法:

jhat -J-Xmx515M dumpfile.dump

此时就会启动1个webServer,然后我们去访问就行了

目前最流行的java开发工具(几款Java开发者必备常用工具)(7)

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 pidPerfCounter.print
  • 列出当前运行的 java 进程可以执行的操作: jcmd PIDhelp
  • 查看线程堆栈信息: jcmd PIDThread.print
  • 查看堆内存信息: jcmd PIDGC.heap_dump FILE_NAME
jps

简单记法: JVM process status全名:Java VirtualMachine Process Status Tool作用: 显示 当前系统用户所有 Java进程情况及其进程号常用命令:

  • 查看进程jvm参数: jps -v
  • 输出程序main class的完整package名或程序的jar文件完整路径名: jps -l
  • 输出传递给main方法的参数: jps -m
jinfo

jvminfomation

作用:和jps功能类似, 但是支持根据指定pis查看指定进程

  • 可以查看JVM参数、系统参数、调整jvm参数
  • 但不支持查看java程序的内存使用情况
javap

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

javac

java编译工具

javac的执行过程:

目前最流行的java开发工具(几款Java开发者必备常用工具)(8)

JDK可视化工具jconsole

可监控jvm,即可监控本地jvm也可监控远程jvm,管理应用程序,可以检查死锁等诸多问题。

目前最流行的java开发工具(几款Java开发者必备常用工具)(9)

jvisualvm

Q:

  • jvisualvm可以监控远程服务器的运行状态。
  • 可以在java程序运行起来后再运行, 通过某些协议连接到java进程中。
  • 运行时, 可以不需要配置配置环境、虚拟机参数等。

点击关注,第一时间了解华为云新鲜技术~

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页