java $1参数_jmap命令详解----查看JVM内存使用详情

linux获取java进程PID:

https://www.cnblogs.com/sxdcgaq8080/p/10734752.html

如果命令使用过程中报错,可能解决你问题的方案:

https://www.cnblogs.com/sxdcgaq8080/p/11089179.html

https://www.cnblogs.com/sxdcgaq8080/p/10675966.html

==========================================

1、jmap命令基本概述

jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

64位机上使用需要使用如下方式:

jmap -J-d64 -heap pid

2、命令格式

复制代码

jmap [option]

(to connect to running process) 连接到正在运行的进程

jmap [option]

(to connect to a core file) 连接到核心文件

jmap [option] [server_id@]

(to connect to remote debug server) 连接到远程调试服务

复制代码

3.参数说明

1) options:

> pid: 目标进程的PID,进程编号,可以采用ps -ef | grep java 查看java进程的PID;

> executable: 产生core dump的java可执行程序;

> core: 将被打印信息的core dump文件;

> remote-hostname-or-IP: 远程debug服务的主机名或ip;

> server-id: 唯一id,假如一台主机上多个远程debug服务;

2)基本参数:

[就是替换[option]位置的参数]

1> -dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

命令:

jmap -dump:live,format=b,file=myjmapfile.txt 19570

结果:

即可在/root目录打开myjmapfile.txt文件。

当然,file=后面也可以指定文件存放的目录,就可以在指定目录查看文件了。

2> -finalizerinfo 打印正等候回收的对象的信息

命令:

jmap -finalizerinfo 3772

结果:

Attaching to process ID 19570, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.80-b11

Number of objects pending for finalization: 0 (等候回收的对象为0个)

3> -heap 打印heap的概要信息,GC使用的算法,heap(堆)的配置及JVM堆内存的使用情况.

命令:

jmap -heap 19570

结果:

解析:

复制代码

using parallel threads in the new generation. ##新生代采用的是并行线程处理方式

using thread-local object allocation.

Concurrent Mark-Sweep GC ##同步并行垃圾回收

Heap Configuration: ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]

MinHeapFreeRatio = 40 ##最小堆使用比例

MaxHeapFreeRatio = 70 ##最大堆可用比例

MaxHeapSize = 2147483648 (2048.0MB) ##最大堆空间大小

NewSize = 268435456 (256.0MB) ##新生代分配大小

MaxNewSize = 268435456 (256.0MB) ##最大可新生代分配大小

OldSize = 5439488 (5.1875MB) ##老年代大小

NewRatio = 2 ##新生代比例

SurvivorRatio = 8 ##新生代与suvivor的比例

PermSize = 134217728 (128.0MB) ##perm区 永久代大小

MaxPermSize = 134217728 (128.0MB) ##最大可分配perm区 也就是永久代大小

Heap Usage: ##堆使用情况【堆内存实际的使用情况】

New Generation (Eden + 1 Survivor Space): ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)

capacity = 241631232 (230.4375MB) ##伊甸区容量

used = 77776272 (74.17323303222656MB) ##已经使用大小

free = 163854960 (156.26426696777344MB) ##剩余容量

32.188004570534986% used ##使用比例

Eden Space: ##伊甸区

capacity = 214827008 (204.875MB) ##伊甸区容量

used = 74442288 (70.99369812011719MB) ##伊甸区使用

free = 140384720 (133.8813018798828MB) ##伊甸区当前剩余容量

34.65220164496263% used ##伊甸区使用情况

From Space: ##survior1区

capacity = 26804224 (25.5625MB) ##survior1区容量

used = 3333984 (3.179534912109375MB) ##surviror1区已使用情况

free = 23470240 (22.382965087890625MB) ##surviror1区剩余容量

12.43827838477995% used ##survior1区使用比例

To Space: ##survior2 区

capacity = 26804224 (25.5625MB) ##survior2区容量

used = 0 (0.0MB) ##survior2区已使用情况

free = 26804224 (25.5625MB) ##survior2区剩余容量

0.0% used ## survior2区使用比例

PS Old Generation: ##老年代使用情况

capacity = 1879048192 (1792.0MB) ##老年代容量

used = 30847928 (29.41887664794922MB) ##老年代已使用容量

free = 1848200264 (1762.5811233520508MB) ##老年代剩余容量

1.6416783843721663% used ##老年代使用比例

Perm Generation: ##永久代使用情况

capacity = 134217728 (128.0MB) ##perm区容量

used = 47303016 (45.111671447753906MB) ##perm区已使用容量

free = 86914712 (82.8883285522461MB) ##perm区剩余容量

35.24349331855774% used ##perm区使用比例

复制代码

4> -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

命令:

jmap -histo:live 19570

结果:

复制代码

num #instances(实例) #bytes(字节大小) class name(类名)

----------------------------------------------

1: 65220 9755240     

2: 65220 8880384     

3: 11721 8252112     [B

4: 6300 6784040     

5: 75224 6218208     [C

6: 93969 5163280     

7: 6300 4854440     

8: 5482 4203152     

9: 72097 2307104     java.lang.String

10: 15102 2289912     [I

11: 4089 2227728     

12: 28887 1386576      org.apache.velocity.runtime.parser.Token

13: 6792 706368 java.lang.Class

14: 7445 638312 [Ljava.util.HashMap$Entry;

4380: 1 16 com.sun.proxy.$Proxy208

4381: 1 16 sun.reflect.GeneratedMethodAccessor198

4382: 1 16 com.sun.proxy.$Proxy46

4383: 1 16 org.apache.ibatis.ognl.SetPropertyAccessor

4384: 1 16 oracle.jdbc.driver.OracleDriver

4385: 1 16 com.sun.proxy.$Proxy181

4386: 1 16 com.sun.proxy.$Proxy82

4387: 1 16 java.util.jar.JavaUtilJarAccessImpl

4388: 1 16 com.sun.proxy.$Proxy171

4389: 1 16 sun.reflect.GeneratedMethodAccessor136

4390: 1 16 sun.reflect.GeneratedConstructorAccessor22

4391: 1 16 org.elasticsearch.action.search.SearchAction

4392: 1 16 org.springframework.core.annotation.AnnotationAwareOrderComparator

Total 1756265 162523736

复制代码

采用jmap -histo pid>a.log日志将其保存,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)。

5> -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

命令:

jmap -permstat 19570

结果:

解析:

复制代码

Attaching to process ID 19570, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.80-b11

finding class loader instances ..done.

computing per loader stat ..done.

please wait.. computing liveness.liveness analysis may be inaccurate ...

class_loader classes bytes parent_loader alive? type

2538 14654264 null live

0x000000070af968c8 63 399160 0x0000000707db1788 dead org/apache/catalina/loader/WebappClassLoader@0x000000070367d2a8

0x000000070cba7b08 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba6a38 28 221344 0x0000000707e709a8 dead org/apache/jasperrvlet/JasperLoader@0x0000000705b11878

0x000000070baed8b8 32 297296 0x0000000707e709a8 dead org/apache/jasperrvlet/JasperLoader@0x0000000705b11878

0x000000070919a610 1 3056 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070bdd1e18 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x0000000707f1d480 1 3072 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba7f48 1 1912 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba8508 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba6c40 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070bd4c6a0 1 3056 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba62b0 28 235472 0x0000000707e709a8 dead org/apache/jasperrvlet/JasperLoader@0x0000000705b11878

0x000000070cba77c8 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba7388 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba8148 1 3064 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070afd8b60 1 6704 0x0000000707db1788 dead org/apache/catalina/loader/WebappClassLoader@0x000000070367d2a8

0x000000070919a410 1 1888 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070bdd05b0 1 1912 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070bc848b8 1 3088 0x0000000707db1788 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba64e8 1 1888 0x0000000707e709a8 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x0000000707f1d2c0 1 3064 0x0000000707db1788 dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070be82e38 1 1912 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

0x000000070cba7908 1 3208 null dead sun/reflect/DelegatingClassLoader@0x0000000702a50b98

.........

total = 273 12995 87547304 N/A alive=1, dead=272 N/A

复制代码

6> -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

7> -h | -help 打印辅助信息

8> -J 传递参数给jmap启动的jvm.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时代变了

阅读文本大概需要 2.6 分钟。最近一段时间,经常有人问我这么一个问题,说,张哥,现在市面上有各种付费网课和付费专栏,但我总觉得只有看书学习才是正途,不知道张哥怎么看?到底哪种学习方式最好呢&…

java properties读取缓存_java 读取 properties文件的各种方法

1。使用java.util.Properties类的load()方法示例: InputStream in lnew BufferedInputStream(new FileInputStream(name));Properties p new Properties();p.load(in);2。使用java.util.ResourceBundle类的getBundle()方法示例: ResourceBundle rb Re…

终于有人把什么是云计算、大数据和人工智能讲明白了!云计算是什么?

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系,可是很多人却不知道什么是云计算或者云计算应用在哪:一般谈云计算的时候会提到大数据、谈人工智能的时候会…

java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息

Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息。这里需要注意的是 Java 8 引入了 Java Mission Control,Java Flight Recorder,和 jcmd 等工具来帮助诊断 JVM 和 Java 应用相关的问题。推荐使用最新的工具以及 jcm…

数据洪流来袭,企业转型势不可挡,如何四两拨千斤?

在漫长的历史里,文明的进步都是伴随着科技的发展,企业也在不断进化,无论是商业战略还是商业模式,在科技的推动下与时俱进,不断更迭创新。历史的长河流入数据洪流的时代,人工智能、大数据、云计算等新技术掀…

java写出http数据包_java用jpcap怎么识别出http和https的数据包?

问题简述:利用java的第三方库jpcap写抓包程序,求解怎么识别出http和https的数据包(就只要能判断出是http协议或https协议即可)。测试的解法:1.在tcp包(jpcap自带TCPPacket类比较方便识别tcp包)的基础上用80端口和443端口区分http和https&…

福利 | 2018 OpenInfra Days China限量版免费票任性放出

号外号外!福利来袭,手速up up up~春困夏乏秋盹冬眠暑气炎炎,OpenInfra帮你提神醒脑——特别好礼限量放送Ready?Go!2018 年 6 月 21-22 日,OpenInfra Days China将于国家会议中心北京升级回归,汇…

开源不止,前进不息:2018 OpenInfra Days China来了!

OpenStack Days China是由一群热衷并专注于开源的中国志愿者为中国开源社区组织和举办的年度社区活动。近两年来,志愿者团队成功激起广泛关注,获得了中国各行各业和来自全球开源开发者社区的巨大支持。会议注册人数共计超过 1 万人,参与人数逾…

java 中创建数据端口_java 如何在服务器端用socket创建一个监听端口,并对接受的数据进行处理,端口号为3333,请高手指点一下...

匿名用户1级2011-09-10 回答我百度HI你好了public class Test {public static void main(String[] args) {Test1 tnew Test1();t.start(); //启动线程}}/*** 继承一个线程类* author Administrator**/class Test1 extends Thread{private ServerSocket server null;public Tes…

短暂相逢却回味无穷,全球最具影响力的以太坊技术会议视频,你保存了吗!...

关注我们,了解更多精彩内容自2008年中本聪发表的那篇仅短短9页的比特币白皮书后,毁誉参半的比特币对当今互联网及物联网的世界格局产生了重大的影响,其后延伸出来的区块链技术成为了全球最时髦的名词。相比比特币,以太坊是区块链技…

java函数式编程 map_函数式编程-对Java 8流进行分区

将任意源流划分为固定大小的批次是不可能的,因为这会加重并行处理。 并行处理时,您可能不知道拆分后第一个子任务中有多少个元素,因此您无法为下一个子任务创建分区,直到完全处理第一个子任务。但是,可以从随机访问ofS…

互联网+2.0:技术有多强 梦想才有多近

在过去不到十年的时间里,互联网行业高速发展。先是以手机、pad等智能终端为主的移动互联网打破了PC端互联网商业发展瓶颈,实体经济也依托互联网进行改造升级,“互联网”成为行业图腾和符号。后是随着人工智能、大数据、云计算等技术的融入&am…

java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园

定时器的应用1、 定时器主要涉及到两个类(java.util包中)-》public class Timer extendsObject(一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 )-->public abstract class TimerTask extendsObjectimple…

java返回object的类型_为什么标准java类的clone()返回Object而不是实际的类型

在java中允许指定函数返回的类型,例如下面的代码public class Test {static class Dad {Dad me() {return this;}}static class Son extends Dad {Son me() {return this;}}}已验证.我们来看看ArrayList类.它已经覆盖了clone()函数(至少我看到它在Oracle jdk 1.7源代码)public …

效率提升,英特尔助力企业驶入“快车道”

随着越来越多的企业加入数字化转型大军,每个企业都在期待着数字化带来的业务创新及优化。从云平台的应用、大数据的决策分析,再到工作流程自动化,企业的IT部门不再仅仅是维护企业本身的业务运作以及数据处理,而是需要接入整个生态…

java怎么写事件listener_java 事件监听器ActionListener

/** 功能:java事件监听器ActionListener*/package com.events;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class changebgcolor extends JFrame implements Ac…

Spring AOP 使用介绍,从前世到今生

前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。本文不介绍源码分析,而是介绍 Spring AOP 中的一些概念,以及它的各种配置…

求1到500以内所有的完数并输出。

如果一个数恰好等于除它本身外的所有因子之和&#xff0c;则这个数就称为完数。 例如&#xff1a;6的因子是1、2、3、&#xff0c;且6123&#xff0c;所以6是完数。 #include <stdio.h> void main() {int s,i,j;for(i1;i<500;i){printf("%d ",i);} } 在这…

java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...

下一代的社区系统&#xff0c;为未来而构建&#x1f4a1; 简介Symphony([ˈsɪmfəni]&#xff0c;n.交响乐)是一个现代化的社区平台&#xff0c;因为它&#xff1a;实现了面向内容讨论的论坛实现了面向知识问答的社区包含了面向用户分享、交友、游戏的社交网络100% 开源⚡ 动机…

机器学习算法比较

本文主要回顾下几个常用算法的适应场景及其优缺点&#xff01;&#xff08;提示&#xff1a;部分内容摘自网络&#xff09;。机器学习算法太多了&#xff0c;分类、回归、聚类、推荐、图像识别领域等等&#xff0c;要想找到一个合适算法真的不容易&#xff0c;所以在实际应用中…