李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 读书观影
  • 系列
  • AI工具集
  • 论坛
  • 友圈
    • 友链
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
静亦定 动亦定
惟坚韧者始能遂其志
  1. 首页
  2. 转载
  3. 技术
  4. 正文

几款Java开发者必备常用的工具,准点下班不在话下

2021年2月19日 237 0 0
本文最后更新于 2021年2月19日,距今已 2090 天,其中的信息可能已经发生变化,请注意甄别。

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

原文链接:https://huaweicloud.blog.csdn.net/article/details/111355665

参考链接

1
  1. 1https://huaweicloud.blog.csdn.net/article/details/111355665huaweicloud.blog.csdn.net
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

几款Java开发者必备常用的工具,准点下班不在话下

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA 常用工具 程序员
最后更新:2021年2月19日

岁月同一天 11 月 11 日

回望过去的今天,你在写什么

  • AI
    1 年前 2025年11月11日
    深度解析 RAG 技术:从原理到落地,构建高精度检索增强生成系统

    在企业知识库问答、专业文档处理、智能客服等场景中,大语言模型(LLM)常常面临“答非所问”“信息过时”“泄露隐私”等问题…

  • AI
    1 年前 2025年11月11日
    深度实战:基于 LangGraph + MCP 的智能音乐推荐 Agent 全解析(从搭建到落地)

    在 AI 与推荐系统结合的浪潮中,传统音乐推荐往往局限于“基于协同过滤”或“关键词匹配”,无法理解用户自然语言中的模糊需…

  • AI
    1 年前 2025年11月11日
    MCP深度解析:从协议本质到实战落地,彻底搞懂 AI 工具交互的标准化方案

    在 AI 工具化的浪潮中,Function Call 让 LLM 具备了调用外部工具的能力,但随着工具数量增多、LLM …

  • 5 年前 2021年11月11日
    WordPress的自动更新好烦啊

    昨晚突然收到邮件,说是WordPress自动更新到最新版了,好烦啊…… 每次更新完之后就得改一大堆东西,太坑了,今天终于…

  • 7 年前 2019年11月11日
    分布式锁-Zookeeper实现分布式锁

    如何用Zookeeper实现分布式锁? 在学习分布式锁之前,需要首先了解一下Zookeeper的[临时顺序节点]。 什么…

  • 7 年前 2019年11月11日
    再小的应用也有架构,面向架构新手的架构实践!

    文章主人公:小明,就职于某互联网公司,从事后端开发工作。最近小明收到通知公司需要开发一款《证件照》应用,需要征集架构方案…

  • 7 年前 2019年11月11日
    分布式锁-Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就…

  • 7 年前 2019年11月11日
    在微服务中使用领域事件

    稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程。当你点击鼠标、敲击键盘…

相关文章
  • SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)2019年9月20日
  • Java浮点数运算2022年7月15日
  • UUID太长怎么办?快来试试NanoId2022年3月31日
  • Java设计模式-原型模式2020年1月10日
  • 基于Java8的Either类2020年6月3日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

我亦飘零久,十年来,深恩负尽,死生师友。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
给服务器加了WAF 又一个逆天改命的人:小小徐 AI的生成能力等于生产力吗? NGINX严重漏洞(CVE-2026-15176、CVE-2026-93479、CVE-2026-97205) Kratos-plus v1.1.27更新说明 php2shell远程执行漏洞修复(CVE-2026-109618 和 CVE-2026-109619)
给主题增加了游客中心功能心气没了,干什么都不得劲给服务器加了WAF我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进
减肥四个月~ Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法 记录一下PHP升级8.5遇到的坑 GPT-5.1深度测评:从智能升级到情感共鸣,AI交互的下一个里程碑 MySQL语法总结 服务器差点被一群垃圾爬虫搞挂了
最近评论
李锋镝 发布于 1 天前(11月09日) 我也刷到了,说是恶意引流的
皮皮社长 发布于 1 天前(11月09日) 我刷到的,怎么是说剧本骗流量的?如果真的是用来骗流量,那真恶心。欺骗网友感情。
李锋镝 发布于 1 天前(11月09日) 现在我这个是十个,其实也够用了
老张博客 发布于 1 天前(11月09日) 雷池唯一不好的就是只能免费5个网站。
fairy 发布于 4 天前(11月06日) 机器人快来我这里吧!
标签聚合
分布式 MySQL Claude Theme 多线程 K8s 架构 WordPress 数据库 日常 SpringBoot SQL AI JAVA Spring AI编程 JVM IDEA Redis ElasticSearch
友情链接
  • 搬砖日记
  • 志文工作室
  • 哥斯拉
  • 彬红茶日记
  • 九仞之行
  • 皮皮社
  • 韩小韩博客
  • 林羽凡
  • lijie blog
  • sssr7844的博客
  • Mr.Sun的博客
  • Serendipity
  • 知向前端
  • 懋和道人
  • Honesty
  • 老张博客
  • 刘永博客
  • 瓦匠个人小站
  • 韩情脉脉

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号