1、jdk工具在linux中的安装,有些系统只安装了jre,并没装JDK,所以就没有jvm工具,一般安装目录在/usr/java或/usr/local/java目录下,可以使用下面方法查看:
[root@b2b ~]# whereis java java: /usr/bin/java [root@b2b ~]# ls -l /usr/bin/java lrwxrwxrwx 1 root root 26 Apr 25 2012 /usr/bin/java -> /usr/java/default/bin/java [root@b2b ~]# ls -l /usr/java/default/bin/java -rwxr-xr-x 1 root root 7630 Jan 20 2012 /usr/java/default/bin/java [root@b2b ~]# ls -l /usr/java/ total 4 lrwxrwxrwx 1 root root 16 Apr 25 2012 default -> /usr/java/latest drwxr-xr-x 8 root root 4096 Apr 25 2012 jdk1.7.0_03 lrwxrwxrwx 1 root root 21 Apr 25 2012 latest -> /usr/java/jdk1.7.0_03 ######################################################################## [tomcat@hs-32 ~]$ whereis java java: /usr/bin/java /usr/share/java [tomcat@hs-32 ~]$ ls -l /usr/bin/java lrwxrwxrwx. 1 root root 26 3月 29 2012 /usr/bin/java -> /usr/java/default/bin/java [tomcat@hs-32 ~]$ ls -l /usr/java/default/bin/java -rwxr-xr-x. 1 root root 50794 11月 10 2011 /usr/java/default/bin/java [tomcat@hs-32 ~]$ ls -l /usr/java/ 总用量 4 lrwxrwxrwx. 1 root root 16 3月 29 2012 default -> /usr/java/latest drwxr-xr-x. 7 root root 4096 3月 29 2012 jre1.6.0_30 lrwxrwxrwx. 1 root root 21 3月 29 2012 latest -> /usr/java/jre1.6.0_30
2、jps JVM Process Status Tool,显示指定系统内所有HotSpot虚拟机进程,使用jps -help可查看使用帮助
命令格式: jps [options] [hostid]
options有下面选项:
-q:只输出LVMID,省略主类的名称
-m:输出虚拟机启动时传递给主函数main()的参数
-l:输出主类名称,如果进程执行的是jar包,则输出jar包路径
-v:输出虚拟机进程启动时JVM参数
如:
[tomcat@hs-27 ~]$ /usr/java/jdk1.6.0_21/bin/jps 22347 Bootstrap 4746 Bootstrap 22291 Bootstrap 25334 Jps 22232 Bootstrap 22174 Bootstrap [tomcat@hs-27 ~]$ /usr/java/jdk1.6.0_21/bin/jps -q 22347 25348 4746 22291 22232 22174 [tomcat@hs-27 ~]$ /usr/java/jdk1.6.0_21/bin/jps -m 25363 Jps -m 22347 Bootstrap start 4746 Bootstrap start 22291 Bootstrap start 22232 Bootstrap start 22174 Bootstrap start [tomcat@hs-27 ~]$ /usr/java/jdk1.6.0_21/bin/jps -l 22347 org.apache.catalina.startup.Bootstrap 4746 org.apache.catalina.startup.Bootstrap 25386 sun.tools.jps.Jps 22291 org.apache.catalina.startup.Bootstrap 22232 org.apache.catalina.startup.Bootstrap 22174 org.apache.catalina.startup.Bootstrap
3、jstat 用来监视VM内存内的各种堆和非堆的大小及其内存使用量
jstat -class pid:显示加载class的数量,及所占空间等信息。
[root@b2b tomcat]# jstat -class 7970 Loaded Bytes Unloaded Bytes Time 5721 11433.3 12 20.1 5.78
jstat -compiler pid:显示VM实时编译的数量等信息。
[root@b2b tomcat]# jstat -compiler 7970 Compiled Failed Invalid Time FailedType FailedMethod 1560 1 0 21.96 1 org/apache/catalina/loader/WebappClassLoader findResourceInternal
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
[root@b2b tomcat]# jstat -gc 7970 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 10624.0 11200.0 0.0 4177.9 152064.0 107753.4 349568.0 11557.8 131072.0 43018.6 661 3.954 16 3.029 6.983
jstat -gccapacity pid:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
[root@b2b tomcat]# jstat -gccapacity 7970 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC 174720.0 174720.0 174720.0 10624.0 10368.0 153728.0 349568.0 349568.0 349568.0 349568.0 131072.0 131072.0 131072.0 131072.0 662 16
jstat -gccause pid:统计gc的情况和引起gc的事件
[root@b2b tomcat]# jstat -gccause 7970 S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC 12.73 0.00 96.32 3.61 32.82 670 3.997 17 3.235 7.233 unknown GCCause No GC
jstat -gcnew pid:new对象的信息。
[root@b2b tomcat]# jstat -gcnew 7970 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 9920.0 9600.0 1472.0 0.0 1 15 9600.0 155200.0 14609.6 664 3.963
jstat -gcnewcapacity pid:new对象的信息及其占用量。
[root@b2b tomcat]# jstat -gcnewcapacity 7970 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 174720.0 174720.0 174720.0 9920.0 58240.0 58240.0 9600.0 174592.0 155200.0 664 16
jstat -gcold pid:old对象的信息。
[root@b2b tomcat]# jstat -gcold 7970 PC PU OC OU YGC FGC FGCT GCT 131072.0 43018.6 349568.0 11669.9 665 16 3.029 6.994
jstat -gcoldcapacity pid:old对象的信息及其占用量。
[root@b2b tomcat]# jstat -gcoldcapacity 7970 OGCMN OGCMX OGC OC YGC FGC FGCT GCT 349568.0 349568.0 349568.0 349568.0 665 16 3.029 6.994
jstat -gcpermcapacity pid:perm对象的信息及其占用量。
[root@b2b tomcat]# jstat -gcpermcapacity 7970 PGCMN PGCMX PGC PC YGC FGC FGCT GCT 131072.0 131072.0 131072.0 131072.0 666 16 3.029 6.997
jstat -gcutil pid:统计gc信息统计。
[root@b2b tomcat]# jstat -gcutil 7970 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 99.56 96.43 3.63 32.82 675 4.057 17 3.235 7.293
jstat -printcompilation pid:当前VM执行的信息。
[root@b2b tomcat]# jstat -printcompilation 7970 300 10 Compiled Size Type Method 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties 1560 182 1 org/hibernate/event/def/DefaultFlushEntityEventListener logDirtyProperties
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。
4、jmp和jhat
jmap是一个很实用的轻量级工具。使用jmap可以查看heap空间的概要情况,粗略的掌握heap的使用情况。也可以生成heapdump文件,再使用jhat通过web浏览器具体分析内容中的对象和数据。
jmap -heap pid:打印heap空间的概要,这里可以粗略的检验heap空间的使用情况
[root@b2b tomcat]# jmap -heap 8529 Attaching to process ID 8529, please wait... Debugger attached successfully. Server compiler detected. JVM version is 20.12-b01 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 536870912 (512.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 134217728 (128.0MB) MaxPermSize = 134217728 (128.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 131006464 (124.9375MB) used = 58065264 (55.37535095214844MB) free = 72941200 (69.56214904785156MB) 44.3224419827101% used From Space: capacity = 24051712 (22.9375MB) used = 5489424 (5.2351226806640625MB) free = 18562288 (17.702377319335938MB) 22.82342313096049% used To Space: capacity = 23855104 (22.75MB) used = 0 (0.0MB) free = 23855104 (22.75MB) 0.0% used PS Old Generation capacity = 357957632 (341.375MB) used = 11597336 (11.060081481933594MB) free = 346360296 (330.3149185180664MB) 3.2398627556011994% used PS Perm Generation capacity = 134217728 (128.0MB) used = 41566224 (39.64064025878906MB) free = 92651504 (88.35935974121094MB) 30.969250202178955% used以上的输出很简单,第四行起开始输出此进程我们的JAVA使用的环境。
Heap Configuration,指在我们启动时设置的一些JVM参数。像最大使用内存大小,年老代,年青代,持久代大小等。
Heap Usage,heap的实际使用情况。包括新生代、老生代和持久代。
有这个可以很简单的查看本进程的内存使用情况。也许进程占用的总内存比较多,但我们在这里可以看到真正用到的并没有多少,很多都是"Free"。内存使用的堆积大多在老年代,内存池露始于此,所以要格外关心“Old Generation”。
jmap -histo[:live] to print histogram of java object heap; if the "live" suboption is specified, only count live objects 这里会生成一个类的统计报表,此表非常简单,如显示什么类有多少个实例,共占了多少字节等。如下:
[root@b2b ~]# jmap -histo 8529 num #instances #bytes class name ---------------------------------------------- 1: 59156 8680688 <constMethodKlass> 2: 14266 8072448 [B 3: 59156 8055024 <methodKlass> 4: 5521 6045576 <constantPoolKlass> 5: 97229 5698288 <symbolKlass> 6: 7730 4557120 [I 7: 5521 4287176 <instanceKlassKlass> 8: 45028 4161304 [C 9: 4443 3393816 <constantPoolCacheKlass> 10: 46256 1480192 java.lang.String 11: 33242 1063744 java.util.HashMap$Entry 12: 10560 929280 java.lang.reflect.Method 13: 26435 845920 jsr166y.LinkedTransferQueue$Node 14: 1473 786952 <methodDataKlass> 15: 6643 650504 [Ljava.util.HashMap$Entry; 16: 6001 624104 java.lang.Class 17: 7831 472400 [S 18: 9171 453376 [[I 19: 6687 267480 java.util.LinkedHashMap$Entry 20: 451 263384 <objArrayKlassKlass> 21: 6463 262400 [Ljava.lang.Object; 22: 5285 253680 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask ......
其中关于I、B、C等的说明如下:
BaseType Character | Type | Interpretation |
B | byte | signed byte |
C | char | Unicode character |
D | double | double-precision floating-point value |
F | float | single-precision floating-point value |
I | int | integer |
J | long | long integer |
L<classname>; | reference | an instance of class de><classname>de> |
S | short | signed short |
Z | boolean | de>truede> or de>falsede> |
[ | reference | one array dimension |
jmap -permstat pid:打印持久代上的内存使用状态,有“活”的,有“死”的。
jmap -dump:format=b,file=xxx pid:导出heap信息,加上live为只导出“活”的对象
jmap -dump:live,format=b,file=xxx pid。
jhat是一个Java堆复制浏览器。这个工具分析Java堆复制文件(例如,由上面的"jmap -dump"所产生的)。jhat启动一个允许堆中的对象在web浏览器中进行分析的web服务器。这个工具并不是想用于应用系统中而是用于"离线"分 析。"jhat工具是平台独立的",其意思是,它可以被用来观察在任何平台上所产生的堆复制。
导出后的映像文件可以用jhat来进行分析,-J是向java虚拟机传一个参数,如-mx768m是指定虚拟机可用最大的内存为768M。如果映像文件很大,你要指定一个很大的值,否则在分析过程中就会有OutOfMemeryError的错误。
jhat -J-mx768m -port <端口号:默认为7000> heap.dmp
执行后等待console中输出Started HTTP server on port 7000,看到后就可以通过浏览器访问http://ip:7000/了。此页面默认为按package分类显示系统中所有的对象实例。在页面的最下端有Other Queries导航,其中有显示jvm中对象实例个数的链接、有显示jvm中对象大小的链接等,点击显示jvm中对象大小的链接
5、VisualVM
VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况。Visualvm目前支持两种连接远程服务的方式,分别是jstatd和JMX方式,下面介绍下两种方式的连接。
jstatd方式,通过RMI服务器来实现的,因此需要在被监控的远程服务器上启动RMI服务,首先,配置java安全访问,创建名称为jstatd.all.policy的文件,可存在任意地方,内容为:
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };然后使用jstatd命令来启动RMI服务:
jstatd -J-Djava.security.policy=/home/tomcat/jvm/jstatd.all.policy -p 1993-Djava.security.policy为上面创建的文件,-p为服务端口,启动服务后,在VisualVM中添加远程主机,然后添加jstatd连接,使用上面设置的端口1993,连接成功后既可查看到远程主机JVM的运行状态,如堆区、栈区的分配空间和GC过程,但是使用jstatd方式连接不能监控到某些服务,如不能监控到CPU运行状态,不能Thread Dump和Head Dump等。
JMX连接方式
jmx连接远程的服务器,要想监控远程tomcat,必须在tomcat启动时同时开启jmx支持,设置端口以及授权信息等。修改tomcat bin目录下的catalina.sh中的JAVA_OPTS选项,如下所示:
JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=2 -XX:-UseGCOverheadLimit -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.252"其中hostname以及jmxremote相关的项就是设置JMX的连接信息,如上所示,连接IP是192.168.0.252,端口号是1099,并没有开启ssl和授权,在VisualVM的远程主机中添加一个JMX的连接就可以连接成功,能监控到CPU运行状态,Thread Dump和Head Dump等。
如果把jmx的信息配置在JAVA_OPTS中会引起一个问题,那就是tomcat关闭的时候总是提示 端口1099被占用而关闭不了。修改一下,把jmx配置在CATALINA_OPTS就可以了,如下所示:
JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=2 -XX:-UseGCOverheadLimit" CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.252"
相关推荐
java虚拟机工具 测试系能,分析线程的好工具
java虚拟机常用命令工具java虚拟机常用命令java虚拟机常用命令
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] > /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...
《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...
MSJVM工具,装JAVA虚拟机需要这个工具,不多介绍,下载试试吧,绝对好用
java虚拟机实现的规范,对于底层运行原理的理解可以更深一层,是java程序员进阶的一大工具书,也可以增进对代码的理解。
本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器...
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
1.2 java命令 1.3 编写命令行工具 1.4 测试本章代码 1.5 本章小结 第2章 搜索class文件 2.1 类路径 2.2 准备工作 2.3 实现类路径 2.3.1 Entry接口 2.3.2 DirEntry 2.3.3 ZipEntry 3 2.3.4 ...
第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16...
第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机...
Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的...
NULL 博文链接:https://xuhuandh.iteye.com/blog/503948
用go语言写的java虚拟机,主要是清楚的表达了jvm的原理。不懂go语言的其实也没关系,其中classpy这个可执行的jar文件,可以清楚的展现出class文件的结构
NULL 博文链接:https://taolei0628.iteye.com/blog/1259292
本书循序渐进地介绍了Scala的函数式编程基础,虽然篇幅短小,却切中要害。读者可以学会使用Scala静态语言的强大功能创建简洁、可扩展、...对于多核时代JVM上的并发编程,Scala是绝好的工具,而本书是你必不可少的向导。
java虚拟机是java必不可少的工具,大家需要的下载用试试
JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化