java 查看堆内存_查看java内存情况的几个常用命令
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内存情况的几个常用命令相关推荐
- java 小根堆 排序_堆排序(java实现)
堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性 来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...
内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...
- epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!
来源:http://boendev.iteye.com/blog/882479 jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程 ...
- java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除
java应用程序占用高内存 重要要点 解决内存问题可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程. Java HotSpot JVM可以报告几种OutOfMemoryError消息,因此务 ...
- java visualvm 内存_【Java线程与内存分析工具】VisualVM与MAT简明教程
前言 本文将简要介绍Java线程与内存分析工具VisualVM和MAT的使用,进一步的学习可参考官网或工具帮助(例如MAT:Help -> Welcome -> Tutorials),并在 ...
- java 检测硬盘原理_深入Java核心 Java内存分配原理精讲
Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ...
- java 数组 内存_图解Java数组的内存分配
1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...
- java代码耗尽内存_有关Java内存溢出及内存消耗的小知识
内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...
最新文章
- BZOJ 1040 骑士
- 大公司的前端开发地址
- Flutter 实例 - 加载更多的ListView
- ansys 帮助文档_ANSYS 2020 R1版帮助文档简介
- cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框
- 阿里云移动端播放器高级功能---截图和音频波形 1
- 拒绝枯燥,有意思的 Loading 页面动效设计
- APP One Link ,android and ios qrcode merge as One QRCode and one short link
- 生产环境的分布式任务调度框架如何选择?quartz、xxl-job、Elastic-Job、Saturn
- Android 内存泄漏问题多多,怎么优化?
- Android基础之图片的压缩算法
- 插件拓展 - 利用js实现n个元素重新组合
- extjs ueditor 图片_Ext整合ueditor示例
- jdk和jre有什么区别?
- Windows使用cwRsync实现服务器文件同步到Linux服务器
- Antd DatePicker之旬查询(本月上旬、本月中旬、本月下旬)
- 【python数据结构】多维数组
- 免费谷歌卫星地图下载器
- 计算机盘中文件夹丢失,“文件夹丢失,我的电脑杀完毒后,很多文件夹找不到了”的解决方案...
- webstorm安装eslint插件_在WebStorm中使用ESLint开发Vue项目 | 六阿哥博客
热门文章
- 世界上最复杂的函数_世界上最伟大的十大公式,你都知道哪些?
- unreal4 分辨率设置
- 人工智能AI学习路线01-AI概念
- 【教程】在天河上安装、移植并验证CESM2.2.0
- Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
- 市场营销工作重中之重——提升工作效率
- stm32 负数_stm32中编码器模式读出“负数”的问题
- 微信JSSDK使用签名算法
- 品牌连锁店5G/4G无线组网方案
- 【读书笔记】好好思考-成甲