当前位置:首页 > Java技术 > linux查看jvm堆栈大小命令,JVM查看命令

linux查看jvm堆栈大小命令,JVM查看命令

2022年08月04日 16:58:50Java技术4

JDK自己提供了不少方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客但愿能起抛砖引玉之用,让你们能开始对JVM性能调优的经常使用工具备所了解。

现实企业级Java开发中,有时候咱们会碰到下面这些问题:html

OutOfMemoryError,内存不足java

内存泄露程序员

线程死锁算法

锁争用(Lock Contention)shell

Java进程消耗CPU太高apache

......ubuntu

这些问题在平常开发中可能被不少人忽视(好比有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但可以理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些经常使用的JVM性能调优监控工具进行介绍,但愿能起抛砖引玉之用。本文参考了网上不少资料,难以一一列举,在此对这些资料的做者表示感谢!关于JVM性能调优相关的资料,请参考文末。数组

A、jps(Java Virtual Machine Process Status Tool)浏览器

jps主要用来输出JVM中运行的进程状态信息。语法格式以下:服务器

若是不指定hostid就默认为当前主机或服务器。

命令行参数选项说明以下:

好比下面:

B、jstack

jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式以下:

命令行参数选项说明以下:

jstack能够定位到线程堆栈,根据堆栈信息咱们能够定位到具体代码,因此它在JVM性能调优中使用得很是多。下面咱们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。

第一步先找出Java进程ID,我部署在服务器上的Java应用名称为mrf-center:

获得进程ID为21711,第二步找出该进程内最耗费CPU的线程,可使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid,我这里用第三个,输出以下:

linux查看jvm堆栈大小命令,JVM查看命令 _ JavaClub全栈架构师技术笔记

TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程,用

获得21742的十六进制值为54ee,下面会用到。

OK,下一步终于轮到jstack上场了,它用来输出进程21711的堆栈信息,而后根据线程ID的十六进制值grep,以下:

能够看到CPU消耗在PollIntervalRetrySchedulerThread这个类的Object.wait(),我找了下个人代码,定位到下面的代码:

它是轮询任务的空闲等待代码,上面的sigLock.wait(timeUntilContinue)就对应了前面的Object.wait()。

C、jmap(Memory Map)和jhat(Java Heap Analysis Tool)

jmap用来查看堆内存使用情况,通常结合jhat使用。

jmap语法格式以下:

若是运行在64位JVM上,可能须要指定-J-d64命令选项参数。

打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息,以下图:

linux查看jvm堆栈大小命令,JVM查看命令 _ JavaClub全栈架构师技术笔记

使用jmap -heap pid查看进程堆内存使用状况,包括使用的GC算法、堆配置参数和各代中堆内存使用状况。好比下面的例子:

使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,若是带上live则只统计活对象,以下:

class name是对象类型,说明以下:

还有一个很经常使用的状况是:用jmap把进程内存使用状况dump到文件中,再用jhat分析查看。jmap进行dump命令格式以下:

我同样地对上面进程ID为21711进行Dump:

dump出来的文件能够用MAT、VisualVM等工具查看,这里用jhat查看:

而后就能够在浏览器中输入主机地址:9998查看了:

linux查看jvm堆栈大小命令,JVM查看命令 _ JavaClub全栈架构师技术笔记

上面红线框出来的部分你们能够本身去摸索下,最后一项支持OQL(对象查询语言)。

D、jstat(JVM统计监测工具)

语法格式以下:

vmid是虚拟机ID,在Linux/Unix系统上通常就是进程ID。interval是采样时间间隔。count是采样数目。好比下面输出的是GC信息,采样时间间隔为250ms,采样数为4:

要明白上面各列的意义,先看JVM堆内存布局:

linux查看jvm堆栈大小命令,JVM查看命令 _ JavaClub全栈架构师技术笔记

能够看出:

如今来解释各列含义:

作者:Respect yourself
来源链接:https://blog.csdn.net/weixin_29216957/article/details/116778352

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17090.html

分享给朋友:

“linux查看jvm堆栈大小命令,JVM查看命令” 的相关文章

性能优化|一张图带你了解JVM是如何进行内存分配

性能优化|一张图带你了解JVM是如何进行内存分配

对象优先在新生代分配 如果对象能够在eden区分配,那么就直接在eden区分配 如果eden区域大小不够新对象存储的话,则会触发一次minor gc, 如果minor gc后发现对象也无法在s区分配,则会直接在老年代中分配...

JVM 从入门到精通(二)JVM和Java体系结构

JVM 从入门到精通(二)JVM和Java体系结构

写在前面:我是「云祁」,一枚热爱技术、会写诗的大数据开发猿。昵称来源于王安石诗中一句 [ 云之祁祁,或雨于渊 ] ,甚是喜欢。 写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多对大数据感兴趣的朋友。如果你也对 数据中台...

JVM中有哪些垃圾收集器?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 新生代垃圾...

JVM学习1--数字存储,内存模型,指令重排

JVM学习1--数字存储,内存模型,指令重排

一、数字在计算机中的存储   整数:以补码形式存储。     补码:正数的补码是自身,负数的补码是取反码加1(取反码时符号位还是1)   浮点型:以float类型表示            注意一下,这八位指数实际上是(127...

浅谈JVM内存模型

浅谈JVM内存模型

JAVA虚拟机在执行JAVA程序的时候,会把它管理的内存分成若干不同的数据区域,每个区域都有各自的用途。目前大致把JVM内存模型划分为五个区域:程序计数器,虚拟机栈,本地方法栈,堆和方法区。   程序计数器 程序计数器(ProgramCounterR...

深入理解JVM(1)——JVM内存模型

Java虚拟机的内存空间分为五个部分,分别是: 程序计数器; Java虚拟机栈 本地方法栈 堆 方法区 接下来对这五部分分别进行详细的介绍 1、程序计数器:   a)什么是程序计数器:程序计数器是内存中的一个很小...

深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型

原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011101723933875/?suggestedreading&wumii 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁...

JVM——JVM大厂面试问题与解答

JVM——JVM大厂面试问题与解答

摘要 本博文主要分享在JVM中的大厂面试问题。总结相关面试问题与yu解答。帮助大家更好的学习与理解JVM的原理。同时也是分享一些有关于JVM实战的经验,帮助大家在工作中排查错误。 一、JVM的内存模型 1.1 JVM1.8内存模型 1.2 JVM内存模型中...

jvm性能调优实战 - 31从测试到上线

jvm性能调优实战 - 31从测试到上线

文章目录 Pre 开发好系统之后的预估性优化 系统压测时的JVM优化 对线上系统进行JVM监控 Pre 前面两篇文章,已经给大家介绍...

JVM学习笔记1:Java虚拟机内存模型

JVM学习笔记1:Java虚拟机内存模型

JVM学习笔记1:Java虚拟机内存模型 学习JVM,Java虚拟机对理解Java程序执行过程和Java程序性能调优具有很大帮助。本系列博客旨在由浅到深学习并理解JVM。参考阅读:《深入理解Java虚拟机-JVM高级特性和最佳实践》。这个书写的非常好,推荐有条件的读者买一本来阅读...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。