1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【JVM与性能调优】与Java性能调优相关的JDK命令行工具大盘点

【JVM与性能调优】与Java性能调优相关的JDK命令行工具大盘点

时间:2019-10-03 23:15:32

相关推荐

【JVM与性能调优】与Java性能调优相关的JDK命令行工具大盘点

一、 jps 命令

1.1 jps介绍

jps(JVM Process Status Tool) 列出Java进程,显示指定系统内所有的HotSpot虚拟机进程。

查询Linux系统当前所有java进程pid的命令,并可通过opt来查看这些进程的详细启动参数。

1.1 jps命令格式

jps [options] [hostid] jps -l -m -v

[options] 选项

-q:仅输出VM标识符,不包括classname,jar name,arguments in main method

-m:输出main method的参数,输出传递给Java进程的参数

-l:输出完全的包名,应用主类名,jar的完全路径名 ,输出主函数的完整路径

-v:输出jvm参数 ,显示传递给jvm的参数

-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件

-Joption:传递参数到vm,例如:-J-Xms512m

31427 sun.tools.jps.Jps -l -m -v -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home -Xms8m

1.2 sudo jps -l

查询Linux系统当前所有java进程pid的命令,并可通过opt来查看这些进程的详细启动参数。

二、top命令

1.2 top命令介绍

top命令是linux系统常用命令之一,能够实时显示系统各个进程的资源占用情况,类似于windows系统的任务管理器。注意:top命令监控的最小单位是进程,如果想监控更小单位时,就需要用到ps或者netstate命令来满足要求。

三、jstack命令

3.1 jstack介绍

jstack用于生成java虚拟机当前时刻的线程快照。jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。

sudo jstacksudo jstack 149319sudo jstack 149319 > dmp.stack

主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息。可以生成JVM当前时刻的线程快照。

3.2 线程快照介绍

线程快照是当前JVM内每一条线程正在执行的方法堆栈的集合。

生成线程快照有利于:

定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

3.3 jstack使用过程中注意事项

(1)如何崩溃How和何处崩溃Where

如果java程序崩溃生成core文件,用来获得core文件的java stack和native stack的信息,从而获取程序是如何崩溃How和何处崩溃Where。

(2)指定-J-d64选项

当指定的进程在64位Java虚拟机上运行时,可能需要指定-J-d64选项

例如:jstack -J-d64 -m pid。

该命令可能在未来的版本中不可用!!!

(2) 组合grep命令使用

结合 grep搜索命令,实现对dmp文件进行快速查询

487 sudo jps488 sudo jstack 202498 > fm200.stack503 grep '^"' fm200.stack |wc496 grep '^"nio' fm200.stack498 grep '^"GC' fm200.stack499 grep '^"GC' -A 5 fm200.stack500 grep '^"nio' fm200.stack479 sudo jstack 16156 > dmp.stack480 more dmp.stack481 grep '^"' dmp.stack482 grep '^nio"' dmp.stack

四、jstat命令

4.1 jstat命令介绍

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令

它的功能非常强大 :

显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。观察Java应用程序运行时信息的工具,查看线程当前状态导出Java应用程序的线程堆栈信息,查看堆信息的详细情况,调用栈,锁等线程栈信息检测死锁

4.2 jstat命令基本使用方法

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

【最常用参数】jstat -gcutil pid:统计gc信息统计。

jstat -class pid:显示加载class的数量,及所占空间等信息。

jstat -compiler pid:显示VM实时编译的数量等信息。

jstat -gcnew pid:new对象的信息。

jstat -gcold pid:old对象的信息。

jstat -gcnewcapacity pid:new对象的信息及其占用量。

jstat -gcoldcapacity pid:old对象的信息及其占用量。

jstat -gcpermcapacity pid: perm对象的信息及其占用量。

jstat -printcompilation pid:当前VM执行的信息。

jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次。

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内纯的占用量。

五、jinfo命令

5.1 jinfo命令介绍

查看正在运行的Java应用程序的扩展参数,甚至在运行时修改部分参数

5.2 jinfo命令基本语法

jinfo <option> <pid> 查看运行时参数

在运行时,修改参数值:

jinfo -flag MaxTenuringThreshold 31518 -XX:MaxTenuringThreshold=15jinfo -flag PrintGCDetails 31518 -XX:-PrintGCDetailsjinfo -flag +PrintGCDetails 31518jinfo -flag PrintGCDetails 31518 -XX:+PrintGCDetails

六、jmap命令

6.1 jmap命令介绍

jmap(JVM Memory Map)命令用于生成heap dump文件(生成堆快照文件),如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

6.2 jmap命令使用

> jmap -dump:format=b,file=heap.hprof 31531Dumping heap to /Users/caojie/heap.hprof ...Heap dump file created

获得堆快照文件之后,可使用多种工具对文件进行分析,例如jhat,VisualVM等。

试试用jconsole或者VisualVM监控另一个jvm的状态。

用profiling工具寻找程序中慢的地方。Eclipse有profiling工具。VisualVM也有这样的功能。

(如果不介意使用闭源软件的话,也试试JProfiler和YourKit)

七、jhat命令

7.1 jhat命令介绍

jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump(分析Java应用程序的堆快照文件),jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。

7.2 jhat命令的使用

使用命令如下:

> jhat heap.hprofReading from heap.hprof...Dump file created Tue Nov 11 06:02:05 CST Snapshot read, resolving...Resolving 8781 objects...Chasing references, expect 1 dots.Eliminating duplicate references.Snapshot resolved.Started HTTP server on port 7000Server is ready.

jhat在分析完成之后,使用HTTP服务器展示其分析结果.

在浏览器中访问http://127.0.0.1:7000/即可得到分析结果。

八、jstatd命令

一个RMI服务器程序

作用相当于代理服务器

建立本地计算机与远程监控工具的通信

jstatd服务器能够将本机的Java应用程序信息传递到远程计算机,由于需要多台计算机做演示,此处略。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。