JVM(7)--java内置工具使用
来源:互联网 发布:linux vim复制多少行 编辑:程序博客网 时间:2024/06/06 14:02
全文转载自:http://blog.csdn.net/fenglibing/article/details/6411940 尊重原创。
javah
javah命令(C Header and Stub File Generator)
javah是用于根据JAVA本地方法,生成对应的c语言头文件及相应的stub文件的命令,使用比较简单。
jps
jps命令(Java Virtual Machine Process Status Tool)
1、介绍
用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。
使用jps时,如果没有指定hostid,它只会显示本地环境中所有的Java进程;如果指定了hostid,它就会显示指定hostid上面的java进程,不过这需要远程服务上开启了jstatd服务,可以参看前面的jstatd章节来启动jstad服务。
2、命令格式
jps [ options ] [ hostid ]
3、常用参数说明
4、服务器标识
hostid指定了目标的服务器,它的语法如下:
[protocol:][[//]hostname][:port][/servername]
protocol - 如果protocol及hostname都没有指定,那表示的是与当前环境相关的本地协议,如果指定了hostname却没有指定protocol,那么protocol的默认就是rmi。
hostname - 服务器的IP或者名称,没有指定则表示本机。
port - 远程rmi的端口,如果没有指定则默认为1099。
Servername - 注册到RMI注册中心中的jstatd的名称。
5、使用示例
5.1、列出本地的Java进程
不带任何参数
fenglibin@libin:~$ jps
11644 Main
1947
12843 Jps
带-v参数
fenglibin@libin:~$ jps -v
11644 Main -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:43467 -Dfile.encoding=GBK
1947 -Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx512m
12858 Jps -
Denv.class.path=/home/fenglibin/java6/lib/dt.jar:/home/fenglibin/java6/lib/tools.jar::/usr/bin/libtool:/usr/bin/autoconf:/usr/local/BerkeleyDB.4.8/lib -Dapplication.home=/home/fenglibin/java6 -Xms8m
带-l参数
fenglibin@libin:~$ jps -l
11644 com.alibaba.china.webww.core.Main
12870 sun.tools.jps.Jps
1947
5.2、列出远程的Java进程
在jstatd章节,我们有通过:
rmiregistry 2020&jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
启动了名为AlternateJstatdServerName的jstatd服务,那么我们此时就可以通过该服务列出其有权限访问的Java进程。
fenglibin@libin:~$ jps 10.1.1.234:2020/AlternateJstatdServerName
29556 Bootstrap
28671 WSPreLauncher
2602 RegistryImpl
18272 Test
2603 Jstatd
jstack
jstack命令(Java Stack Trace)
1、介绍
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项”-J-d64”,Windows的jstack使用方式只支持以下的这种方式:
jstack [-l] pid
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
2、命令格式
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
3、常用参数说明
1)、options:
executable Java executable from which the core dump was produced.
(可能是产生core dump的java可执行程序)
core 将被打印信息的core dump文件
remote-hostname-or-IP 远程debug服务的主机名或ip
server-id 唯一id,假如一台主机上多个远程debug服务
2)、基本参数:
pid 需要被打印配置信息的java进程id,可以用jps查询.
4、使用示例
jstat
jstat命令(Java Virtual Machine Statistics Monitoring Tool)
1、介绍
Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:
jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数。
它主要是用来显示GC及PermGen相关的信息,如果对GC不怎么了解,先看这篇文章:http://blog.csdn.net/fenglibing/archive/2011/04/13/6321453.aspx,否则其中即使你会使用jstat这个命令,你也看不懂它的输出。
2、语法
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption - 单个的常用的命令行选项,如-help, -options, 或 -version。
outputOptions -一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。
statOption:
根据jstat统计的维度不同,可以使用如下表中的选项进行不同维度的统计,不同的操作系统支持的选项可能会不一样,可以通过-options选项,查看不同操作系统所支持选项,如:
-h n
用于指定每隔几行就输出列头,如果不指定,默认是只在第一行出现列头。
-J javaOption
用于将给定的javaOption传给java应用程序加载器,例如,“-J-Xms48m”将把启动内存设置为48M。如果想查看可以传递哪些选项到应用程序加载器中,可以相看如下的文档:
Linux and Solaris:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/java.html
Windows: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html
-t n
用于在输出内容的第一列显示时间戳,这个时间戳代表的时JVM开始启动到现在的时间(注:在IBM JDK5中是没有这个选项的)。
vmid - VM的进程号,即当前运行的java进程号。
还有两个关于显示频率的选项:
interval–间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒。
count-打印次数,如果缺省则打印无数次。
-class
-compiler
-gc
-gccapacity
-gccause
这个选项用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因,它比-gcutil会多出最后一次垃圾收集原因以及当前正在发生的垃圾收集的原因。
-gcnew
在新生代中做垃圾收集的时候,每次复制一个对象后,将增加这个对象的收集计数,当一个对象在新生代中被复制了一定次数后,该算法即判定该对象是长周期的对象,把他移动到老生代,这个阈值叫着tenuring threshold。这个阈值用于表示某个/些在执行批定次数youngGC后还活着的对象,即使此时新生的的Survior没有满,也同样被认为是长周期对象,将会被移到老生代中。MTTMaximum tenuring threshold,用于表示TT的最大值。DSSDesired survivor size (KB).可以参与这里:http://blog.csdn.net/yangjun2/article/details/6542357
ECEden space当前容量的大小(KB)EUEden space已经使用的大小(KB)YGC从应用程序启动到采样时发生 Young GC 的次数YGCT从应用程序启动到采样时 Young GC 所用的时间(单位秒)
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
从应用程序启动到采样时发生 Full GC 的次数 -gcutil
-printcompilation
4、使用示例
示例1)、
示例2):
图中同时打印了young gc和full gc的总次数、总耗时。而,每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生了1次young gc,消耗的时间为0.252-0.252=0.0秒。
常驻内存区(P)的使用率,始终停留在64.21%左右,说明常驻内存没有突变,比较正常。如果youngnbsp;gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。
示例3)、
以上,介绍了Jstat按百分比查看gc情况的功能。其实,它还有功能,例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出来的,比较少用,在此就不做介绍。
示例4)、jstat -class pid:显示加载class的数量,及所占空间等信息。
示例5)、jstat -compiler pid:显示VM实时编译的数量等信息。
示例6)、查看远程服务器上的GC情况。
这个需要先在远程服务器上面开启jstatd服务,可以选看这里如何开启jstatd服务,http://blog.csdn.net/fenglibing/article/details/17323515
下面是一个执行示例:
C:\Documents and Settings\Administrator>jstat -gcutil 18272@the_ip:2021/jstatdName 1000
S0 S1 E O P YGC YGCT FGC FGCT GCT0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
0.00 0.00 8.00 0.00 24.36 0 0.000 0 0.000 0.000
示例就不一一例举,有兴趣的可以自己尝试尝试。
Oracle上关于Jstat的使用说明:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
- JVM(7)--java内置工具使用
- JVM(7)--java内置工具使用(2)
- jvm内置工具
- JVM 调优-JDK内置工具
- java内置调试工具的使用
- JVM基础(7)——jdk常用内置工具
- paip.提升性能---jvm java 工具使用.
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- JDK内置工具使用
- 【leetcode】237. Delete Node in a Linked List
- 【iOS开发】二维码生成 二维码读取 (带Logo的二维码)
- poj 3468 A Simple Problem with Integers LAZY线段树
- oracle性能优化之 高效SQL语句
- [python] yield example
- JVM(7)--java内置工具使用
- ACM 专题训练 最短最长路
- 在tomcat下部署工程
- android AsyncTask介绍
- 最大子串和
- 1.2.6 Linux distributions
- Mac 终端命令详解
- 阿语布局
- 设计模式:单例模式(Singleton)