JVM内存分配概述html
Jvm 内存分为:堆、非堆及直接内存三大块。java
堆区分为年轻代和老年代,永生代属于非堆内存。linux
对象优先在Eden区分配apache
大对象直接进入老年代bootstrap
长期存活的对象将进入老年代api
class、常量等信息jvm直接加载进持久代数组
Java对象首先进入Eden区,若是对象没有在被引用,会进入存活区(S0-S1顺序可变换), 还有引用对象而后进入老年代(大对象直接进入老年代)
年轻代满的时候会触发YongGC(Eden触发),只对年轻代回收
老年代满的时候会触发Full GC(old触发),会对整个堆内存进行垃圾清理(包括老年代、年轻代);Full GC大于24小时一次,比较合理
在gc的时候会中止应用(线程) tomcat
说明:app
Heap Configuration: //堆内存初始化配置jvm
MinHeapFreeRatio = 40 //jvm堆最小空闲比率
MaxHeapFreeRatio = 70 //jvm堆最大空闲比率
MaxHeapSize = 264241152 (252.0MB) //jvm堆的最大的大小
NewSize = 1048576 (1.0MB) //jvm堆的新生代的默认大小
MaxNewSize = 4294901760 (4095.9375MB) //jvm堆新生代最大的大小
OldSize = 4194304 (4.0MB) //jvm堆老生代的大小
NewRatio = 2 //新生代和老生代的大小比率
SurvivorRatio = 8 //新生代中eden区与survivor区的大小比率
PermSize = 12582912 (12.0MB) //jvm堆的永生代的初始值大小
MaxPermSize = 67108864 (64.0MB)//jvm堆永生代的最大的大小
Heap Usage: //堆内存的分布
New Generation (Eden + 1 Survivor Space): //eden区加1个survivor区内存分布
capacity = 4980736 (4.75MB) //eden区加survivor区总容量
used = 2726552 (2.6002426147460938MB) //eden区加survivor区总使用
free = 2254184 (2.1497573852539062MB) //eden区加survivor区总空闲
54.74194978412829% used
Eden Space: //eden区内存分布
capacity = 4456448 (4.25MB) //eden区总容量
used = 2202264 (2.1002426147460938MB) //eden区已使用
free = 2254184 (2.1497573852539062MB) //eden区剩余容量
49.417473288143384% used //eden区使用比率
From Space: //这个使用的survivor区的内存分布
capacity = 524288 (0.5MB) //这个使用的survivor区总容量
used = 524288 (0.5MB) //这个使用的survivor区已使用
free = 0 (0.0MB) //这个使用的survivor区空闲
100.0% used//这个使用的survivor区使用比率
To Space: //另外一个未使用的survivor区的内存分布
capacity = 524288 (0.5MB)
used = 0 (0.0MB)
free = 524288 (0.5MB)
0.0% used
tenured generation: //老生代的内存分布
capacity = 11010048 (10.5MB)
used = 4150576 (3.9582977294921875MB)
free = 6859472 (6.5417022705078125MB)
37.69807361421131% used
Perm Generation: // 永生代的内存分布
capacity = 12582912 (12.0MB)
used = 8190808 (7.811363220214844MB)
free = 4392104 (4.188636779785156MB)
65.09469350179036% used
说明:
Num:序号
Instances : 实例个数
Bytes: 大小
Class name : 类名
文件内容:
看不懂啊,须要使用jhat命令进行分析
从左到右依次显示为:内存地址,所占内存大小,文件权限,文件路径及名称
查看: html页面可查看堆中包含的全部类的信息
JProfiler 的内存视图部分能够提供动态的内存使用情况更新视图和显示关于内存分配情况信息的视图。
全部的视图都有几个汇集层而且可以显示现有存在的对象和做为垃圾回收的对象。
全部对象 显示类或在情况统计和尺码信息堆上全部对象的包。
能够标记当前值并显示差别值。
记录对象 Record objects 显示类或全部已记录对象的包。
能够标记出当前值而且显示差别值。
分配访问树 Allocation call tree 显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。
分配热点 Allocation hot spots 显示一个列表,包括方法、类、包或分配已选类的J2EE组件。
能够标注当前值而且显示差别值。
对于每一个热点均可以显示它的跟踪记录树。
在JProfiler的堆遍历器(Heap walker)中,你能够对堆的情况进行快照而且能够经过选择步骤下寻找感兴趣的对象。
堆遍历器有五个视图:
类 Classes 显示全部类和它们的实例。
分配 Allocations 为全部记录对象显示分配树和分配热点。
引用 References 为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。
还能提供合并输入视图和输出视图的功能。
数据 Data 为单个对象显示实例和类数据。
时间 Time 显示一个对已记录对象的解决时间的柱状图。
JProfiler 提供不一样的方法来记录访问树以优化性能和细节。
线程或者线程组以及线程情况能够被全部的视图选择。
全部的视图均可以汇集到方法、类、包或J2EE组件等不一样层上。
CPU视图部分包括:访问树 Call tree 显示一个积累的自顶向下的树,树中包含全部在JVM中已记录的访问队列。
JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树能够根据Servlet和JSP对URL的不一样须要进行拆分。
热点 Hot spots 显示消耗时间最多的方法的列表。对每一个热点都可以显示回溯树。
该热点能够按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。
访问图 Call graph 显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。
访问栈 Call tracer 显示全部记录的函数调用的时间序列。
call tracer 是根据线程、包以及类来分组的,所以能够容易的找到感兴趣的指定区域。
能够隐藏线程、包类或者单个函数,以把大量的信息整理成容易分析事物。
该查看有利于分析涉及多个线程的用例,或者从调试器没法达到的角度来详细地分析控制流。
对线程剖析,JProfiler提供如下视图:
线程历史 Thread history 显示一个与线程活动和线程状态在一块儿的活动时间表。
线程监控 Thread monitor 显示一个列表,包括全部的活动线程以及它们目前的活动情况。
死锁探测图表 Deadlock Detection 显示一个包含了全部在JVM里的死锁图表。
目前使用的监测器 Current monitor useage 显示目前使用的监测器而且包括它们的关联线程。
历史检测记录 History usage history 显示重大的等待事件和阻塞事件的历史记录。
监测使用状态 Monitor usage statistics 显示分组监测,线程和监测类的统计监测数据。
观察JVM的内部状态,JProfiler提供了不一样的遥感勘测视图,堆 Heap 显示一个堆的使用情况和堆尺寸大小活动时间表。
记录的对象 Recorded objects 显示一张关于活动对象与数组的图表的活动时间表。
垃圾回收 Garbage collector 显示一张关于垃圾回收活动的活动时间表。
类 Classes 显示一个与已装载类的图表的活动时间表。
线程 Threads 显示一个与动态线程图表的活动时间表。
能够分别查看heap,eden,survivors,code_cache,permanent内存 使用状况。
而且对代码或者gc策略进行调优。
输出给定 java 进程全部的配置信息。包括 java 系统属性和 jvm 命令行标记等。
-flags 打印命令行参数
-sysprops 打印系统属性
参数后可跟具体变量名称
若是不跟参数则全打印
以下:
[root@jingyang bin]# jinfo 1824
Attaching to process ID 1824, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 20.45-b01
Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = /usr/java/jdk1.6.0_45/jre/lib/i386
java.vm.version = 20.45-b01
shared.loader =
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http://java.sun.com/
path.separator = :
tomcat.util.buf.StringCache.byte.enabled = true
java.util.logging.config.file = /data/apps/apache-tomcat-7.0.41/conf/logging.properties
java.vm.name = Java HotSpot(TM) Client VM
file.encoding.pkg = sun.io
sun.java.launcher = SUN_STANDARD
user.country = CN
sun.os.patch.level = unknown
java.vm.specification.name = Java Virtual Machine Specification
user.dir = /data/apps/apache-tomcat-7.0.41/bin
java.runtime.version = 1.6.0_45-b06
org.apache.catalina.startup.TldConfig.jarsToSkip =
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
java.endorsed.dirs = /data/apps/apache-tomcat-7.0.41/endorsed
os.arch = i386
java.io.tmpdir = /data/apps/apache-tomcat-7.0.41/temp
line.separator =
java.vm.specification.vendor = Sun Microsystems Inc.
java.naming.factory.url.pkgs = org.apache.naming
java.util.logging.manager = org.apache.juli.ClassLoaderLogManager
os.name = Linux
sun.jnu.encoding = UTF-8
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,jasper-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomcat-spdy.jar,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,jstl.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.jar,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
java.library.path = /usr/java/jdk1.6.0_45/jre/lib/i386/client:/usr/java/jdk1.6.0_45/jre/lib/i386:/usr/java/jdk1.6.0_45/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
java.specification.name = Java Platform API Specification
java.class.version = 50.0
sun.management.compiler = HotSpot Client Compiler
os.version = 2.6.32-358.el6.i686
org.apache.catalina.startup.ContextConfig.jarsToSkip =
user.home = /root
catalina.useNaming = true
user.timezone = PRC
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.6
catalina.home = /data/apps/apache-tomcat-7.0.41
java.class.path = /data/apps/apache-tomcat-7.0.41/bin/bootstrap.jar:/data/apps/apache-tomcat-7.0.41/bin/tomcat-juli.jar
user.name = root
java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory
package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
java.vm.specification.version = 1.0
sun.java.command = org.apache.catalina.startup.Bootstrap start
java.home = /usr/java/jdk1.6.0_45/jre
sun.arch.data.model = 32
user.language = zh
java.specification.vendor = Sun Microsystems Inc.
java.vm.info = mixed mode
java.version = 1.6.0_45
java.ext.dirs = /usr/java/jdk1.6.0_45/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/java/jdk1.6.0_45/jre/lib/resources.jar:/usr/java/jdk1.6.0_45/jre/lib/rt.jar:/usr/java/jdk1.6.0_45/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0_45/jre/lib/jsse.jar:/usr/java/jdk1.6.0_45/jre/lib/jce.jar:/usr/java/jdk1.6.0_45/jre/lib/charsets.jar:/usr/java/jdk1.6.0_45/jre/lib/modules/jdk.boot.jar:/usr/java/jdk1.6.0_45/jre/classes:/tmp/jag6aKikx
server.loader =
java.vendor = Sun Microsystems Inc.
catalina.base = /data/apps/apache-tomcat-7.0.41
file.separator = /
java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi
common.loader = ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
package.access = sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
sun.cpu.isalist =
VM Flags:
-Djava.util.logging.config.file=/data/apps/apache-tomcat-7.0.41/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -agentpath:/opt/jprofiler/bin/linux-x86/libjprofilerti.so=port=8849 -Djava.endorsed.dirs=/data/apps/apache-tomcat-7.0.41/endorsed -Dcatalina.base=/data/apps/apache-tomcat-7.0.41 -Dcatalina.home=/data/apps/apache-tomcat-7.0.41 -Djava.io.tmpdir=/data/apps/apache-tomcat-7.0.41/temp
用来监视VM内存内的各类堆和非堆的大小及其内存使用量。
参数说明:
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
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内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还能够同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还能够加上-h3每三行显示一下标题。
[root@jingyang bin]# jstat -gcutil 1824 1 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
0.00 3.76 91.20 61.02 96.96 23 0.071 0 0.000 0.071
为指定的线程输出 java 的线程堆栈信息,包括了进程里的全部线程。每个线程 frame ,包括类全名,方法名,代码行。
[root@jingyang bin]# jstack 1824
2014-08-16 18:59:34
Full thread dump Java HotSpot(TM) Client VM (20.45-b01 mixed mode):
"Attach Listener" daemon prio=10 tid=0x9f564400 nid=0x8b3 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"ajp-bio-8009-AsyncTimeout" daemon prio=10 tid=0xa0556000 nid=0x736 waiting on condition [0x9f10b000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.__jprofiler_nmp_sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:148)
at java.lang.Thread.run(Thread.java:662)
"ajp-bio-8009-Acceptor-0" daemon prio=10 tid=0xa0554c00 nid=0x735 runnable [0x9f15c000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
- locked <0xa5fffdb0> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216)
at java.lang.Thread.run(Thread.java:662)
"http-bio-8082-AsyncTimeout" daemon prio=10 tid=0x9f8f2c00 nid=0x734 waiting on condition [0x9f1ad000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.__jprofiler_nmp_sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:148)
at java.lang.Thread.run(Thread.java:662)
"http-bio-8082-Acceptor-0" daemon prio=10 tid=0x9f575000 nid=0x733 runnable [0x9f1fe000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
- locked <0xa60012b8> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216)
at java.lang.Thread.run(Thread.java:662)
"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=10 tid=0x9f4d0000 nid=0x732 waiting on condition [0x9f35c000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.__jprofiler_nmp_sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1508)
at java.lang.Thread.run(Thread.java:662)
"GC Daemon" daemon prio=10 tid=0x9f7d9800 nid=0x72f in Object.wait() [0x9feb7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0xa5f610e8> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(GC.java:100)
- locked <0xa5f610e8> (a sun.misc.GC$LatencyLock)
"_jprofiler_control_sampler" daemon prio=10 tid=0x9fd07c00 nid=0x72e waiting on condition [0x9fbab000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.__jprofiler_nmp_sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at com.jprofiler.agent.probe.f.run(ejt:1025)
"Low Memory Detector" daemon prio=10 tid=0x9fd02c00 nid=0x72c runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread0" daemon prio=10 tid=0x9fd01000 nid=0x72b waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
"_jprofiler_sampler" daemon prio=10 tid=0xa05fac00 nid=0x72a waiting on condition [0x9fe66000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.__jprofiler_nmp_sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at com.jprofiler.agent.Sampler.run(ejt:97)
"_jprofiler_native_sampler" daemon prio=10 tid=0x08c52c00 nid=0x729 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"_jprofiler_native_comm" daemon prio=10 tid=0xa05e9c00 nid=0x726 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0xa05e8400 nid=0x725 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=10 tid=0xa052f800 nid=0x724 in Object.wait() [0xa04ad000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0xa5dfb558> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <0xa5dfb558> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)
"Reference Handler" daemon prio=10 tid=0xa052e400 nid=0x723 in Object.wait() [0xa04fe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0xa5dfb5e8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0xa5dfb5e8> (a java.lang.ref.Reference$Lock)
"main" prio=10 tid=0xb6a4f800 nid=0x721 runnable [0xb6bd9000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
- locked <0xa6368a90> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:452)
at org.apache.catalina.startup.Catalina.await(Catalina.java:766)
at org.apache.catalina.startup.Catalina.start(Catalina.java:712)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
"VM Thread" prio=10 tid=0xa0500c00 nid=0x722 runnable
"VM Periodic Task Thread" prio=10 tid=0x9fd06800 nid=0x72d waiting on condition
JNI global references: 4191
此命令是一个RMI Server应用程序,提供了对JVM的建立和结束监视,也为远程监视工具提供了一个能够attach的接口
参数说明:
-nr 当一个存在的RMI Registry没有找到时,不尝试建立一个内部的RMI Registry
-p port 端口号,默认为1099
-n rminame 默认为JStatRemoteHost;若是多个jstatd服务开始在同一台主机上,rminame惟一肯定一个jstatd服务
-J jvm选项
受权文件建立
Vi jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
启动
jstatd -J-Djava.security.policy=jstatd.all.policy &
运行jvisualvm 首先须要先启动jstatd
待抽时间对每一种工具进行详细解说,互相勉励、互相学习。