1、jinfo

jinfo:的用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo -opt pid 如:查看52606的MaxPerm大小可以用 jinfo -flag MaxPermSize 52606。

2、jps

显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),不过jps有个缺点是只能显示当前用户的进程id,要显示其他用户的还只能用linux的ps命令。

执行jps命令,会列出所有正在运行的java进程,其中jps命令也是一个java程序,前面的数字就是对应的进程id,这个id的作用非常大,后面会有相关介绍。

jps -help:

jps -l :

输出应用程序main.class的完整package名或者应用程序jar文件完整路径名

jps -v: 输出传递给JVM的参数

jps失效

我们在定位问题过程会遇到这样一种情况,用jps查看不到进程id,用ps -ef | grep java却能看到启动的java进程。

要解释这种现象,先来了解下jps的实现机制:

java程序启动后,会在目录/tmp/hsperfdata_{userName}/下生成几个文件,文件名就是java进程的pid,因此jps列出进程id就是把这个目录下的文件名列一下而已,至于系统参数,则是读取文件中的内容。

我们来思考下:如果由于磁盘满了,无法创建这些文件,或者用户对这些文件没有读的权限。又或者因为某种原因这些文件或者目录被清除,出现以上这些情况,就会导致jps命令失效。

如果jps命令失效,而我们又要获取pid,还可以使用以下两种方法:

1、top | grep java

2、ps -ef |grep java

3、jstat

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。

jstat -class pid:显示加载class的数量,及所占空间等信息。

jstat -compiler pid:显示VM实时编译的数量等信息。

jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。

jstat -gcnew pid:new对象的信息。

jstat -gcnewcapacity pid:new对象的信息及其占用量。

jstat -gcold pid:old对象的信息。

jstat -gcoldcapacity pid:old对象的信息及其占用量。

jstat -gcpermcapacity pid: perm对象的信息及其占用量。

jstat -util pid:统计gc信息统计。

jstat -printcompilation pid:当前VM执行的信息。

除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 260 6是每260毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。

4、jmap

主要用于打印指定java进程的共享对象内存映射或堆内存细节。

堆Dump是反映堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。一般在内存不足,GC异常等情况下,我们会去怀疑内存泄漏,这个时候就会去打印堆Dump。

jmap的用法:

jmap pid

打印的信息分别为:共享对象的起始地址、映射大小、共享对象路径的全程。

jmap -heap pid:查看堆使用情况

map -histo pid:查看堆中对象数量和大小

打印的信息分别是:序列号、Class实例的数量、内存的占用、类限定名

如果是内部类,类名的开头会加上*,如果加上live子参数的话,如jmap -histo:live pid,这个命名会触发一次FUll GC,只统计存活对象

java 查看堆内存_查看java内存情况的几个常用命令相关推荐

  1. java 小根堆 排序_堆排序(java实现)

    堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性  来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...

    内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...

  4. epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!

    来源:http://boendev.iteye.com/blog/882479 jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程 ...

  5. java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除

    java应用程序占用高内存 重要要点 解决内存问题可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程. Java HotSpot JVM可以报告几种OutOfMemoryError消息,因此务 ...

  6. java visualvm 内存_【Java线程与内存分析工具】VisualVM与MAT简明教程

    前言 本文将简要介绍Java线程与内存分析工具VisualVM和MAT的使用,进一步的学习可参考官网或工具帮助(例如MAT:Help -> Welcome -> Tutorials),并在 ...

  7. java 检测硬盘原理_深入Java核心 Java内存分配原理精讲

    Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ...

  8. java 数组 内存_图解Java数组的内存分配

    1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...

  9. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

最新文章

  1. BZOJ 1040 骑士
  2. 大公司的前端开发地址
  3. Flutter 实例 - 加载更多的ListView
  4. ansys 帮助文档_ANSYS 2020 R1版帮助文档简介
  5. cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框
  6. 阿里云移动端播放器高级功能---截图和音频波形 1
  7. 拒绝枯燥,有意思的 Loading 页面动效设计
  8. APP One Link ,android and ios qrcode merge as One QRCode and one short link
  9. 生产环境的分布式任务调度框架如何选择?quartz、xxl-job、Elastic-Job、Saturn
  10. Android 内存泄漏问题多多,怎么优化?
  11. Android基础之图片的压缩算法
  12. 插件拓展 - 利用js实现n个元素重新组合
  13. extjs ueditor 图片_Ext整合ueditor示例
  14. jdk和jre有什么区别?
  15. Windows使用cwRsync实现服务器文件同步到Linux服务器
  16. Antd DatePicker之旬查询(本月上旬、本月中旬、本月下旬)
  17. 【python数据结构】多维数组
  18. 免费谷歌卫星地图下载器
  19. 计算机盘中文件夹丢失,“文件夹丢失,我的电脑杀完毒后,很多文件夹找不到了”的解决方案...
  20. webstorm安装eslint插件_在WebStorm中使用ESLint开发Vue项目 | 六阿哥博客

热门文章

  1. 世界上最复杂的函数_世界上最伟大的十大公式,你都知道哪些?
  2. unreal4 分辨率设置
  3. 人工智能AI学习路线01-AI概念
  4. 【教程】在天河上安装、移植并验证CESM2.2.0
  5. Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
  6. 市场营销工作重中之重——提升工作效率
  7. stm32 负数_stm32中编码器模式读出“负数”的问题
  8. 微信JSSDK使用签名算法
  9. 品牌连锁店5G/4G无线组网方案
  10. 【读书笔记】好好思考-成甲