JVM常用分析工具(扩展)

JVM常用分析工具(扩展)

JVM常用分析工具(扩展)
	jps
		简介
			 用来查看所有的jvm进程,包括进程ID,进程启动的路径等。
			 jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
       ps命令我们经常用到,这个命令主要是用来显示当前系统的进程情况。比如有哪些进程及其 id。jps命令也是一样,它的作用是显示当前系统的java进程情况及其id号。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)以及他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。
		语法
			jps [-q] [-mlvV] [<hostid>]
			-q    安静,只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
			-m   输出传递给main 方法的参数,在嵌入式jvm上可能是null
			-l (显示完整路径)
			-v (显示传递给JVM的命令行参数)
			-V (显示通过flag文件传递给JVM的参数)
			hostid是主机id,默认localhost
		例子
			# jps 
				4214 Bootstrap 
18096 jar 
26423 Jps 
					默认显示 进程ID 和 启动类的名称。
			# jps -q 
				4214 
18096 
26438 
					-q 只输出进程ID,而不显示出类的名称
			# jps -m 
				4214 Bootstrap start 
18096 jar 
26453 Jps -m 
					 -m 可以输出传递给 Java 进程(main 方法)的参数
			# jps -l 
				4214 org.apache.catalina.startup.Bootstrap 
18096 logmon.jar 
26468 sun.tools.jps.Jps 
					 -l 可以输出主函数的完整路径(类的全路径)。
			# jps -v 
				
4214 Bootstrap -Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms2560m -Xmx2560m -Xmn680m -Xss256k -XX:PermSize=240m -XX:MaxPermSize=240m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.53/endorsed -Dcatalina.base=/usr/local/apache-tomcat-7.0.53 -Dcatalina.home=/usr/local/apache-tomcat-7.0.53 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.53/temp 
18096 jar -Xms64m -Xmx64m -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 
26483 Jps -Denv.class.path=.:/usr/local/jdk/lib/dt.jar:/usr/local/jdk/lib/tools.jar -Dapplication.home=/usr/local/jdk1.7.0_55 -Xms8m 
					-v 可以显示传递给 Java 虚拟机的参数。
			# jps -V 
				4214 Bootstrap 
26512 Jps 
18096 jar
					-V 显示通过flag文件传递给JVM的参数
	jinfo
		简介
			负责观察进程运行环境参数,包括Java System属性和JVM命令行参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息
		语法
			jinfo [ option ] pid
			jinfo [ option ] executable core
			jinfo [ option ] [server-id@]remote-hostname-or-IP
			pid   进程号
			executable    产生 core dump 的 java executable
			core   core file
			remote-hostname-or-IP   主机名或ip
			server-id   远程主机上的debug server的唯一id
			-flags         打印命令行参数
			-sysprops      打印系统属性
		例子
			# jinfo 4214 
				这个命令包含了 JDK 和 JVM 运行起来时的一些属性,4214 JAVA进程号
				 1 Attaching to process ID 19233, please wait...
  2 Debugger attached successfully.
  3 Server compiler detected.
  4 JVM version is 25.151-b12
  5 Java System Properties:
  6 
  7 java.runtime.name = Java(TM) SE Runtime Environment
  8 java.vm.version = 25.151-b12
  9 sun.boot.library.path = /usr/local/jdk1.8.0_151/jre/lib/amd64
 10 shared.loader =
 11 java.vendor.url = http://java.oracle.com/
 12 java.vm.vendor = Oracle Corporation
 13 path.separator = :
 14 file.encoding.pkg = sun.io
 15 java.vm.name = Java HotSpot(TM) 64-Bit Server VM
 16 java.util.logging.config.file = /usr/local/tomcat/instance3/conf/logging.properties
 17 tomcat.util.buf.StringCache.byte.enabled = true
 18 sun.os.patch.level = unknown
 19 sun.java.launcher = SUN_STANDARD
 20 user.country = US
 21 user.dir = /root
 22 java.vm.specification.name = Java Virtual Machine Specification
 23 java.runtime.version = 1.8.0_151-b12
 24 org.apache.catalina.startup.TldConfig.jarsToSkip =
 25 java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
 26 os.arch = amd64
 27 java.endorsed.dirs = /usr/local/tomcat/endorsed
 28 line.separator =
 29 
 30 java.io.tmpdir = /usr/local/tomcat/instance3/temp
 31 java.vm.specification.vendor = Oracle Corporation
 32 java.util.logging.manager = org.apache.juli.ClassLoaderLogManager
 33 java.naming.factory.url.pkgs = org.apache.naming
 34 os.name = Linux
 35 sun.jnu.encoding = UTF-8
 36 java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
 37 tomcat.util.scan.DefaultJarScanner.jarsToSkip = bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,annotations-api.jar,    el-api.jar,jsp-api.jar,servlet-api.jar,catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,jasper.jar,j    asper-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomcat-spdy.ja    r,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapters.jar,catalina-jmx-r    emote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.ja    r,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lan    g*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,jstl.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.ja    r,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,jmx-tools.jar,jta*.jar,log4j*.jar,mail*.    jar,slf4j*.jar,xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,junit.jar,junit-*.jar,ant-launcher.jar
 38 java.class.version = 52.0
 39 java.specification.name = Java Platform API Specification
 40 sun.management.compiler = HotSpot 64-Bit Tiered Compilers
 41 os.version = 3.10.0-693.el7.x86_64
 42 user.home = /root
 43 org.apache.catalina.startup.ContextConfig.jarsToSkip =
 44 user.timezone = Asia/Shanghai
 45 catalina.useNaming = true
 46 java.awt.printerjob = sun.print.PSPrinterJob
 47 file.encoding = UTF-8
 48 java.specification.version = 1.8
 49 catalina.home = /usr/local/tomcat
 50 user.name = root
 51 java.class.path = /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
 52 java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory
 53 package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
 54 java.vm.specification.version = 1.8
 55 sun.arch.data.model = 64
 56 sun.java.command = org.apache.catalina.startup.Bootstrap start
 57 java.home = /usr/local/jdk1.8.0_151/jre
 58 user.language = en
 59 java.specification.vendor = Oracle Corporation
 60 awt.toolkit = sun.awt.X11.XToolkit
 61 java.vm.info = mixed mode
 62 java.version = 1.8.0_151
 63 java.ext.dirs = /usr/local/jdk1.8.0_151/jre/lib/ext:/usr/java/packages/lib/ext
 64 jmagick.systemclassloader = no
 65 sun.boot.class.path = /usr/local/jdk1.8.0_151/jre/lib/resources.jar:/usr/local/jdk1.8.0_151/jre/lib/rt.jar:/usr/local    /jdk1.8.0_151/jre/lib/sunrsasign.jar:/usr/local/jdk1.8.0_151/jre/lib/jsse.jar:/usr/local/jdk1.8.0_151/jre/lib/jce.jar    :/usr/local/jdk1.8.0_151/jre/lib/charsets.jar:/usr/local/jdk1.8.0_151/jre/lib/jfr.jar:/usr/local/jdk1.8.0_151/jre/cla    sses
 66 server.loader =
 67 java.vendor = Oracle Corporation
 68 catalina.base = /usr/local/tomcat/instance3
 69 file.separator = /
 70 java.vendor.url.bug = http://bugreport.sun.com/bugreport/
 71 common.loader = ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
 72 sun.io.unicode.encoding = UnicodeLittle
 73 sun.font.fontmanager = sun.awt.X11FontManager
 74 sun.cpu.endian = little
 75 package.access = sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
 76 sun.cpu.isalist =
 77 
 78 VM Flags:
 79 Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=33554432 -XX:MaxHeapSize=522190848 -XX:MaxNewSize=174    063616 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=11141120 -XX:OldSize=22413312 -XX:+UseCompressedClassPointers -XX:+Us    eCompressedOops -XX:+UseFastUnorderedTimeStamps
 80 Command line:  -Djava.util.logging.config.file=/usr/local/tomcat/instance3/conf/logging.properties -Djava.util.loggin    g.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -Dcatalina.base=/usr/    local/tomcat/instance3 -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/instance3/temp


	jstack
		简介
			用来观察 jvm 中当前所有线程的运行情况和线程当前状态。
		语法
			jstack [ option ] pid
			jstack [ option ] executable core
			jstack [ option ] [server-id@]remote-hostname-or-IP
			core 将被打印信息的core dump文件
			remote-hostname-or-IP 远程debug服务的主机名或ip
			server-id 唯一id,假如一台主机上多个远程debug服务
			pid    需要被打印配置信息的java进程id,可以用jps查询
			选项
				-F      当’jstack [-l] pid’没有相应的时候强制打印栈信息
				-l      长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
				-m     打印java和native c/c++框架的所有栈信息.
		例子
			# jstack -F 18096 
				18096  JAVA进程号
				Attaching to process ID 18096, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 24.55-b03 
Deadlock Detection: 
 
No deadlocks found. 
 
Thread 18105: (state = BLOCKED) 
 
 
Thread 18104: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=135 (Interpreted frame) 
- java.lang.ref.ReferenceQueue.remove() @bci=2, line=151 (Interpreted frame) 
- java.lang.ref.Finalizer$FinalizerThread.run() @bci=16, line=189 (Interpreted frame) 
 
 
Thread 18103: (state = BLOCKED) 
- java.lang.Object.wait(long) @bci=0 (Interpreted frame) 
- java.lang.Object.wait() @bci=2, line=503 (Interpreted frame) 
- java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=133 (Interpreted frame) 
	jstat
		简介
			用于输出指定 java 进程的统计信息
			利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler情况;可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。
		语法
			jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
			class:统计classloader的行为
			compiler:统计hotspot just-in-time编译器的行为
			gc:统计gc行为
			gccapacity:统计堆中代的容量、空间
			gccause:垃圾收集统计,包括最近引用垃圾收集的事件,基本同gcutil,比gcutil多了两列
			gcnew:统计新生代的行为
			gcnewcapacity:统计新生代的大小和空间
			gcold:统计旧生代的行为
			gcoldcapacity:统计旧生代的大小和空间
			gcpermcapacity:统计永久代的大小和空间
			gcutil:垃圾收集统计
			printcompilation:hotspot编译方法统计
			-h n 每n个样本,显示header一次
			-t n 在第一列显示时间戳列,时间戳时从jvm启动开始计算
			<vmid>   就是进程号
			<interval> interval是监控时间间隔,单位为微妙,不提供就意味着单次输出
			<count>      count是最大输出次数,不提供且监控时间间隔有值的话, 就无限打印
		例子
			# jstat -class 4214 2000 10 
				     (每隔2秒监控一次,一共做10次) 
				Loaded Bytes Unloaded Bytes  Time 
				9197   18418.   0 0    0.0  12.49 
				9197   18418.   0 0    0.0  12.49
				列名介绍:
				Column 	Description
				Loaded 	被读入类的数量
				Bytes 	被读入的字节数(K)
				Unloaded 	被卸载类的数量
				Bytes 	被卸载的字节数(K)
				Time 	花费在load和unload类的时间
	jmap
		简介
			 用来监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量。当系统崩溃时,jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等。
		语法
			jmap [option] <pid>
			jmap [option] <executable <core>
			jmap [option] [server_id@]<remote server IP or hostname>
			-dump:format=b,file=<filename> pid    # dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名
			-finalizerinfo  # 打印等待回收对象的信息
			-heap           # 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况
			-histo[:live]   # 打印堆的对象统计,包括对象数、内存大小等等 (因为在dump:live前会进行full gc,因此不加live的堆大小要大于加live堆的大小 )
			-permstat       # 打印classload类装载器和 jvm heap长久层的信息. 包含包括每个装载器的名字,活跃,地址,父装载器,和其总共加载的类大小。另外,内部String的数量和占用内存数也会打印出来. 
			-F              # 强制,强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.  
			-J              # 传递参数给jmap启动的jvm. ,如:-J-Xms256m
		例子
			# jmap -heap 4214 
				Attaching to process ID 4214, please wait... 
				Debugger attached successfully. 
				Server compiler detected. 
				JVM version is 24.55-b03 
				 
				using parallel threads in the new generation. 
				using thread-local object allocation. 
				Concurrent Mark-Sweep GC 
				 
				Heap Configuration:                        # 堆配置情况
				MinHeapFreeRatio = 40                      #  最小堆的使用比例
				MaxHeapFreeRatio = 70                      # 最大堆的可用比例
				MaxHeapSize = 2684354560 (2560.0MB)        # 最大堆空间大小
				NewSize = 713031680 (680.0MB)              # 新生代分配大小
				MaxNewSize = 713031680 (680.0MB)           # 最大可用新生代分配大小 
				OldSize = 5439488 (5.1875MB)               # 老年代大小
				NewRatio = 2                               # 新生代比例
				SurvivorRatio = 8                          # 新生代与suvivor的比例
				PermSize = 251658240 (240.0MB)             # perm区大小
				MaxPermSize = 251658240 (240.0MB)          # 最大可分配perm区大小
				G1HeapRegionSize = 0 (0.0MB)               # G1堆区大小
				 
				Heap Usage:                                # 堆使用情况
				New Generation (Eden + 1 Survivor Space):  # 新生代(伊甸区 + survior空间)
				capacity = 641728512 (612.0MB)             # 伊甸区容量
				used = 507109064 (483.6168899536133MB)     # 已经使用大小
				free = 134619448 (128.38311004638672MB)    # 剩余容量
				79.0223676394793% used                     # 使用比例
				Eden Space:                                # 伊甸区
				capacity = 570425344 (544.0MB)             # 伊甸区容量
				used = 503156488 (479.84741973876953MB)    # 伊甸区使用
				free = 67268856 (64.15258026123047MB)      # 伊甸区当前剩余容量
				88.2072462755091% used                     # 伊甸区使用情况
				From Space:                                # survior1区
				capacity = 71303168 (68.0MB)               # survior1区容量
				used = 3952576 (3.76947021484375MB)        # surviror1区已使用情况
				free = 67350592 (64.23052978515625MB)      # surviror1区剩余容量
				5.543338551240809% used                    # survior1区使用比例
				To Space:                                  # survior2 区
				capacity = 71303168 (68.0MB)               # survior2区容量
				used = 0 (0.0MB)                           # survior2区已使用情况
				free = 71303168 (68.0MB)                   # survior2区剩余容量
				0.0% used                                  # survior2区使用比例
				concurrent mark-sweep generation:          # 老生代使用情况
				capacity = 1971322880 (1880.0MB)           # 老生代容量
				used = 1514740296 (1444.5689163208008MB)   # 老生代已使用容量
				free = 456582584 (435.4310836791992MB)     # 老生代剩余容量
				76.83877214472345% used                    # 老生代使用比例
				Perm Generation:                           # perm区使用情况
				capacity = 251658240 (240.0MB)             # perm区容量
				used = 57814400 (55.1361083984375MB)       # perm区已使用容量
				free = 193843840 (184.8638916015625MB)     # perm区剩余容量
				22.973378499348957% used                   # perm区使用比例
				 
				28645 interned Strings occupying 3168232 bytes.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值