热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java自带命令行工具jmap、jhat与jinfo的使用实例代码详解

本篇文章主要通过代码实例对java自带命令行工具jmap、jhat与jinfo的使用做出了详解,需要的朋友可以参考下

java自带命令行工具(jmap,jhat,jinfo)

(1)JMAP

1.作用

打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息。

2.使用

jmap[options]pid
jmap[options]executablecore
jmap[options][pid]server-id@]remote-hostname-or-IP

如果指定的进程是在64位Java虚拟机(JVM)上运行,那么你可能需要指定-J-d64选项,例如:jmap -J-d64 -heap pid。

3.参数选项

3.1

当不使用选项,该jmap命令打印共享对象映射

C:\Users\Administrator>jmap9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24.75-b04
0x00000000623c00008016KD:\Java\jdk1.7.0_75\jre\bin\server\jvm.dll
0x0000000062ba0000840KD:\Java\jdk1.7.0_75\jre\bin\msvcr100.dll
0x0000000062cc0000144KD:\Java\jdk1.7.0_75\jre\bin\sunec.dll
0x0000000062cf000068KD:\Java\jdk1.7.0_75\jre\bin\nio.dll
0x0000000062d10000100KD:\Java\jdk1.7.0_75\jre\bin\net.dll
0x0000000062d30000160KD:\Java\jdk1.7.0_75\jre\bin\java.dll
0x00000000634d000084KD:\Java\jdk1.7.0_75\jre\bin\zip.dll
0x000000006595000044KD:\Java\jdk1.7.0_75\jre\bin\sunmscapi.dll
0x000000006596000060KD:\Java\jdk1.7.0_75\jre\bin\verify.dll
0x000000006597000044KD:\Java\jdk1.7.0_75\jre\bin\management.dll
...

3.2

-dump:[live,] format=b, file=filename

转储Java堆hprof二进制格式。指定live,标识转储active状态的对象。生成的文件可以由jhat命令查看。

C:\Users\Administrator>jmap-dump:format=b,file=9208_0413.hprof9208
DumpingheaptoC:\Users\Administrator\9208_0413.hprof...
Heapdumpfilecreated

3.3-finalizerinfo

打印将要结束的对象的信息

C:\Users\Administrator>jmap-finalizerinfo9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24.75-b04
Numberofobjectspendingforfinalization:0

3.4 -heap

打印垃圾收集和heap摘要信息,以及生成-wise 堆使用的堆摘要

C:\Users\Administrator>jmap-heap9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24.75-b04
 
usingthread-localobjectallocation.
ParallelGCwith4thread(s)
 
HeapConfiguration:
MinHeapFreeRatio=0
MaxHeapFreeRatio=100
MaxHeapSize=2124414976(2026.0MB)
NewSize=1310720(1.25MB)
MaxNewSize=17592186044415MB
OldSize=5439488(5.1875MB)
NewRatio=2
SurvivorRatio=8
PermSize=21757952(20.75MB)
MaxPermSize=85983232(82.0MB)
G1HeapRegiOnSize=0(0.0MB)
 
HeapUsage:
PSYoungGeneration
EdenSpace:
capacity=68157440(65.0MB)
used=16646688(15.875518798828125MB)
free=51510752(49.124481201171875MB)
24.423875075120193%used
FromSpace:
capacity=5242880(5.0MB)
used=5228248(4.986045837402344MB)
free=14632(0.01395416259765625MB)
99.72091674804688%used
ToSpace:
capacity=15728640(15.0MB)
used=0(0.0MB)
free=15728640(15.0MB)
0.0%used
PSOldGeneration
capacity=88080384(84.0MB)
used=27239848(25.977943420410156MB)
free=60840536(58.022056579589844MB)
30.9261231195359%used
PSPermGeneration
capacity=22020096(21.0MB)
used=15369592(14.657585144042969MB)
free=6650504(6.342414855957031MB)
69.7980244954427%used
 10057internedStringsoccupying867832bytes.

3.5 -histo[:live]

打印堆的直方图

num#instances#bytesclassname
----------------------------------------------
...
877:132[Lcom.sun.jndi.ldap.pool.Pool;
878:232com.sun.org.apache.xerces.internal.impl.dv.dtd.ENTITYDatatypeValidator
879:232java.lang.Shutdown$Lock
880:132org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler
881:232com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver
882:132java.lang.reflect.WeakCache$CacheKey
883:132java.text.FieldPosition
884:132java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
885:232sun.security.x509.CertificateVersion
886:232[Lorg.apache.catalina.deploy.ContextEnvironment;
887:132[Lorg.apache.tomcat.util.net.AbstractEndpoint$Acceptor$AcceptorState;
888:132sun.nio.cs.StandardCharsets
...

3.6 -clstats

java 堆的wise统计。1.7.0_75不支持该项

(2)jhat

2.1作用

分析Java堆。该jhat命令解析Java堆转储文件并启动Web服务器。jhat命令可以让你浏览堆转储。支持OQL语法。

2.2使用

jhat [ options ] heap-dump-file

2.3参数说明

1.-stack false|true

关闭跟踪对象分配调用堆栈。默认值是true。

-refs false|true

关闭对象的引用的跟踪。默认为true。

-port port-number

设置端口的jhatHTTP服务器。默认值是7000。

-exclude exclude-file

指定列出了应当从可及的对象查询排除数据成员的文件

-baseline exclude-file

指定基准堆转储。在具有相同的对象ID两个堆转储对象被标记为不是新对象。这是用于比较两个不同的堆转储有用。

-debug int

0级表示没有调试输出

C:\Users\Administrator>jhat-port80009208_0413.hprof
Readingfrom9208_0413.hprof...
DumpfilecreatedThuApr1321:18:58CST2017
Snapshotread,resolving...
Resolving389761objects...
Chasingreferences,expect77dots..........................................................................
Eliminatingduplicatereferences............................................................................
Snapshotresolved.
StartedHTTPserveronport8000
Serverisready.

接下来,就可以通过浏览器访问查看。http://localhost:8000/。

(3)jinfo

3.1作用

生成的配置信息。如果指定的进程是在64位JVM上运行,那么你可能需要指定-J-d64选项

3.2使用

jinfo[option]pid
jinfo[option]executablecore
jinfo[option][servier-id]remote-hostname-or-IP

3.3选项参数

no-option:既打印命令行标志和系统属性键值对。

-flag name

打印名和指定的命令行标志的值。

-flag [+|-]name

开启或禁止指定的布尔命令行标志。

-flag name=value

设置指定的命令行标志为指定值。

-flags

打印命令行标志传递给JVM。

-sysprops

打印Java系统属性键值对。

打印进程的命令行参数

C:\Users\Administrator>jinfo-flags9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24.75-b04
 -Djava.util.logging.config.file=D:\apache-tomcat-7.0.67\conf\logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=D:\apache-tomcat-7.0.67\endorsed-Dcatalina.base=D:\apache-tomcat-7.0.67-Dcatalina.home=D:\apache-tomcat-7.0.67-Djava.io.
tmpdir=D:\apache-tomcat-7.0.67\temp
#在catalina.sh中可以找到设置的地方

打印参数值

#值类型参数
C:\Users\Administrator>jinfo-flagNewSize9208
-XX:NewSize=1310720
 
#开关类型参数
C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:-PrintGC
 
C:\Users\Administrator>jinfo-flagXmn9208
nosuchflag'Xmn'

可以总结出:-xms,-xmn系列参数不能通过jinfo指定或打印;jinfo命令作用于-XX:***格式的参数。

设置参数值

C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:-PrintGC
 
C:\Users\Administrator>jinfo-flag+PrintGC9208
 
C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:+PrintGC
//2windows环境总是失败
 
C:\Users\Administrator>jinfo-flagPermSize=217500009208
Exceptioninthread"main"java.io.IOException:CommandfailedintargetVM
atsun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:112)
atsun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
atsun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:190)
atsun.tools.jinfo.JInfo.flag(JInfo.java:123)
atsun.tools.jinfo.JInfo.main(JInfo.java:76)

希望本篇文章对您有所帮助


推荐阅读
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
author-avatar
百脑汇_惠州店_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有