摘要:一问一答的形式轻松学习掌握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进程中。
  • 运行时, 可以不需要配置配置环境、虚拟机参数等。

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

几款Java开发者必备常用的工具,准点下班不在话下的更多相关文章

  1. 八款Android 开发者必备的小工具

    Photo from https://www.airpair.com 在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大 ...

  2. Java开发者必备的10大学习网站,送给入门学习java的你,请收下!

    作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的 Java 开发者必备的网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题 ...

  3. Java开发者必备十大学习网站

    作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的Java开发者必备的网站,这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试 ...

  4. Java开发者必备的六款工具

    每一位Java程序员都会有套工具来应对工作上的挑战.多年来,Java程序员使用软件来完成他们的工作.有很多工具对他们是有用的,不过对于初入行的人员来说,寻找合适的工具是困难的,并且是浪费时间的.而今天 ...

  5. JAVA程序员常用开发工具

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

  6. 国内 Java 开发者必备的两个装备,你配置上了么?

    虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众领域的开发者来说,依然对于国外的各种基础资源依赖还是非常的强.所以,一些网络基本技能一直都是我们需要掌握的,但是速度与稳定性问题一直也都有困扰着 ...

  7. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  8. Java世界最常用的工具类库

    Apache Commons Apache Commons有很多子项目,常用的项目如下 BeanUtils 提供了一系列对java bean的操作,读取和设置属性值等 map和bean的互相转换 我们 ...

  9. 【原创】Java基础之常用JVM工具

    查看当前所有java进程 # jps 查看某个进程的堆内存占用情况 # jmap -heap $pid 查看某个进程的堆内存中对象分布情况 # jmap -histo $pid 将某个进程的堆内存导出 ...

  10. SharePoint 2013常用开发工具分享

    众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程.本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助.如果您有更好的工具,没有包含在本 ...

随机推荐

  1. Kafka的零拷贝技术Zero-Copy

    传统的拷贝过程 流程步骤: (1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存: (2)应用程序将数据从内核空间读入用户空间缓冲区: (3)应用程序将读到数据写回内核空间并放入socket缓冲区 ...

  2. 由mysql转为oracle注意事项

    1. text类型->nclob 2. 表名是关键字   引号 3. 字段名是关键字 引号 4. 日期型和mysql不同,hh24:mi:ss  就是HH:mm:ss,库里存日期型也可以(查询时 ...

  3. 【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps

    [论文阅读]点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps 终于一次轮到了讲自己的paper了 hahaha, ...

  4. Java面向对象(高级)

    1.类变量 类变量是被类的所有实例共享的. 类变量具体放的位置在哪?在内存中的那个区域,这和jdk的版本是有关的 静态变量在类加载的时候就生成了,即使没有创建类实例也能访问,当然通过实例来实现 类变量 ...

  5. shell脚本之规范与变量

    shell编程规范与变量 名词简述 面向过程语言 按照顺序执行程序 第一件事干什么->第二件事干什么......(C,shell...) 面向对象语言 把程序看成一个整体(java,python ...

  6. 题解 CF1742G

    题目描述: 给你一个序列 \(A\),要求将 \(A\) 重新排序,使得序列 \(A\) 的前缀或和序列 \(B\) 的字典序最大. 题目分析: 这道题我们首先考虑一个性质,就是前缀或和序列 \(B\ ...

  7. Go 14周年

    原文在这里. 由 Russ Cox, for the Go team 发布于2023年11月10日 今天,我们庆祝Go开源发布的第十四个生日!Go在过去一年里取得了巨大的进展,发布了两个功能丰富的版本 ...

  8. WebGL初接触

    有感于在不少jd中看到关于WebGL的内容,想起来之前在高程中还没看完的canvas,就匆匆把剩余的一点看完了,高程中的内容还是皮毛,就属于很基础的.概念性的东西. WebGL 画布的3D上下文.不是 ...

  9. 时间复杂度为 O(nlogn) 的排序算法

    归并排序 归并排序遵循分治的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解,归并排序的步骤如下: 划分:分解待排序的 n 个元素的 ...

  10. 从滑动窗口到YOLO、Transformer:目标检测的技术革新

    本文全面回顾了目标检测技术的演进历程,从早期的滑动窗口和特征提取方法到深度学习的兴起,再到YOLO系列和Transformer的创新应用.通过对各阶段技术的深入分析,展现了计算机视觉领域的发展趋势和未 ...