java虚拟机监控及诊断工具命令行篇_第1页
java虚拟机监控及诊断工具命令行篇_第2页
java虚拟机监控及诊断工具命令行篇_第3页
java虚拟机监控及诊断工具命令行篇_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

讲 深入拆解Java虚拟 文章详30|Java虚拟机的及诊断工具(命令行篇2018-09-283030|Java虚拟机及诊断工具(命令行篇朗读人 10′59′′|今天,我们来一起了解一下JDK中用于及诊断工具。本篇中我将使用刚刚发布的Java11版本你可能用过ps命令,打印所有正在运行的进程的相关信息。JDKjps命令(帮助文档)沿用了同样的概念:它将打印所有正在运行的Java进程的相关信息。在默认情况下,jpsJavaID来打印额外的信息。例如,-l将打印模块名以及包名;-v将打印传递给Java虚拟机的参数(如--代代$jps-18331o18332jdk.jcmd/sun.tools.jps.Jps18332jdk.jcmd/sun.tools.jps.Jps-mlv-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该Java进程。..代$jstat--------- 代#Usage:jstat-outputOptions[-t][-hlines]VMID[interval代#Usage:jstat-outputOptions[-t][-hlines]VMID[interval$jstat-gc22126 417472,017472,017472,017472,0 17472,017472,017472,017472,0 403,9139904,0139538,4 当本地环境的Java进程时,VMID可以简单理解为PID。如果需要环境的Java进程,你可以参考jstat的帮助文档。在上面这个示例中,22126进程是一个使用了CMS回收器的Java进程。我们利用jstat的-gc子命令,来打印该进程回收相关的数据。命令最后的1s4表示每隔1秒打印一次,共打印4区的容量(Utility)SurvivorSurvivor使用量为0。G1GC 71680,02048,069632,0□代$jstat-gc22208□代$jstat-gc22208你可能已经留意到,S0C和S0U0Survivor(S1C)0。这是因为,当使用G1GC时,Java虚拟机不再设置Eden区、Survivor区,老年代区的内存边EdenSurvivorSurvivorSurvivor(CopyingGC),我们只需另外申请一个或多个内存区域,作为新的Survivor区。S1CS1US0CS0U0当发生回收时,Java虚拟机可能出现Survivor内存区域内的对象全被回收或晋升的现象堆中可能完全没有Survivor内存区域,因而相应的S1C和S1U将会是0。在下面这个示例中,第一列代表该Java进程已经启动了10.7秒。代代$jstat-gc-t10,7 55296,0 JavaGC(GCT)GCGC空间,随时都可能抛出OOM异常。连续获取多行性能数据,并取这几行数据中OU列(即已占用的老年代内存)的最小值。OU漏掉的CGC和CGCT,它们分别代表并发GCStop-The-World的次数和时间。出马,分析我们通常会利用jmapdump:live,format=b,file=filename.bin命令,将堆中所有存活对这里format=b将使jmap导出与hprof(在Java9中已被移除)、-格式的文件可以被其他GUI工具查看,具体我会在下一篇中进行演示。$-histoclassname[B[Ljava.lang.Object;[Ijava.math.BigIntegerjava.lang.String11代代差。举个例子,假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么:live□□代暂停时间较长,约为二三十秒,可酌情调CTRL+CSIGINT信号无法停止,需要SIGKILL。staticdoublesum=0;publicstaticvoidmain(String[]args)for(inti=0;i<;i++){//countedsum+=Math.log(i);//Math.logisan}}jmap(以及接下来的jinfo、jstack和jcmd)JavaAttachAPI,因此只能本地Java进程。一旦开启Java虚拟机参数DisableAttaechanism(即使用参数-的jvm_args)、-XX参数(即输出中的VMFlags),以及可在Java层面通过System.getProperty获取的-D参数(即输出中的SystemProperties)。代代$jinfoJavaSystemVMVMjvm_args:-Xlog:gc-Xmx1024mmand:org.example.Foojava_class_path(initial):LauncherType:pilerCount=4-XX:ConcGCThreads=3-VMsun.jnu.encoding=UTF-进程的举个例子,我们可以使用jinfoflag+HeapDumpAfterFullGC<PID>命令,开启<PID>所指定的Java进程的HeapDumpAfterFullGC参数。"manageableintx=intx=-intx=bool=bool=bool=ccstr=uintx=uintx=bool=bool=javaversion"11"2018-09-Java(TM)SERuntimeEnvironment18.9□代□代$java-XX:+PrintFlagsFinal-version|grepJavaHotSpot(TM)64-BitServerVM18.9(build11+28,mixedjstack的其中一个应用场景便是死锁检测。这里我用jstackJava 代$jstack"Thread-0"#12prio=5os_prio=31cpu=1.32mselapsed=34.24stid=0xjava.lang.Thread.State:BLOCKED(onobjectmonitor)atwaitingtolock ff904c0>(alocked ff904b0>(aatDeadLock$$Lambda$1/0x0000000800060840.run(UnknownSource)atjava.lang.Thread.run(java.base@11/Thread.java:834)"Thread-1"#13prio=5os_prio=31cpu=1.43mselapsed=34.24stid=0xjava.lang.Thread.State:BLOCKED(onobjectmonitor)atwaitingtolock ff904b0>(alocked ff904c0>(aatDeadLock$$Lambda$2/0x0000000800063040.run(UnknownSource)atjava.lang.Thread.run(java.base@11/Thread.java:834)JNIglobalrefs:6,weakrefs:FoundoneJava-level"Thread-waitingtolockmonitor0x00007fb (object0x whichisheldby"Thread-1""Thread-waitingtolockmonitor (object whichiswhichisheldby"Thread-Javastackinformationforthethreadslisted"Thread-at-waitingtolockff904c0>(a-lockedff904b0>(aatDeadLock$$Lambda$1/0x0000000800060840.run(Unknownatjava.lang.Thread.run(java.base@11/Thread.java:834)at-waitingtolockff904b0>(a-lockedff904c0>(aatDeadLock$$Lambda$2/0x0000000800063040.run(UnknownatFound1…)以及正在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论