JVM内存分配概述

Jvm 内存分为:堆、非堆及直接内存三大块。

堆区分为年轻代和老年代,永生代属于非堆内存。

对象优先在Eden区分配

大对象直接进入老年代

长期存活的对象将进入老年代

class、常量等信息jvm直接加载进持久代

Java对象首先进入Eden区,如果对象没有在被引用,会进入存活区(S0-S1顺序可变换), 还有引用对象然后进入老年代(大对象直接进入老年代)
年轻代满的时候会触发YongGC(Eden触发),只对年轻代回收
老年代满的时候会触发Full GC(old触发),会对整个堆内存进行垃圾清理(包括老年代、年轻代);Full GC大于24小时一次,比较合理
在gc的时候会停止应用(线程)

监控

1.1Jmap

Jmap –heap pid    查看堆内存的使用情况

说明:

Heap Configuration:            //堆内存初始化配置

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

jmap –histo pid 查看堆内存中的对象数量,大小

说明:

Num:序号

Instances  : 实例个数

Bytes: 大小

Class name : 类名

Jmap -dump将内存使用详情输出到文件

文件内容:

看不懂啊,需要使用jhat命令进行分析

1.2Pmap  查看单一进程内存使用详情

从左到右依次显示为:内存地址,所占内存大小,文件权限,文件路径及名称

1.3Jhat 分析导出的堆文件

查看: html页面可查看堆中包含的所有类的信息

1.4Jps显示java进程

1.5 jprofiler

1.5.1内存视图Memory Views

JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。

所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。  

所有对象  显示类或在状况统计和尺码信息堆上所有对象的包。

可以标记当前值并显示差异值。  

记录对象 Record objects   显示类或所有已记录对象的包。

可以标记出当前值并且显示差异值。 

分配访问树 Allocation call tree   显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。  

分配热点 Allocation hot spots   显示一个列表,包括方法、类、包或分配已选类的J2EE组件。

可以标注当前值并且显示差异值。

对于每个热点都可以显示它的跟踪记录树。

1.5.2堆遍历 Heap walker

在JProfiler的堆遍历器(Heap walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。

堆遍历器有五个视图:  

类 Classes   显示所有类和它们的实例。 

分配 Allocations   为所有记录对象显示分配树和分配热点。 

引用 References   为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。

还能提供合并输入视图和输出视图的功能。 

数据 Data   为单个对象显示实例和类数据。 

时间 Time   显示一个对已记录对象的解决时间的柱状图。

1.5.3 CPU 剖析CPU Views

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 是根据线程、包以及类来分组的,因此可以容易的找到感兴趣的指定区域。

可以隐藏线程、包类或者单个函数,以把大量的信息整理成容易分析事物。

该查看有利于分析涉及多个线程的用例,或者从调试器无法达到的角度来详细地分析控制流。

1.5.4 线程剖析 Thread Views

对线程剖析,JProfiler提供以下视图:  

线程历史 Thread history   显示一个与线程活动和线程状态在一起的活动时间表。 

线程监控 Thread monitor   显示一个列表,包括所有的活动线程以及它们目前的活动状况。

死锁探测图表 Deadlock Detection   显示一个包含了所有在JVM里的死锁图表。 

目前使用的监测器 Current monitor useage   显示目前使用的监测器并且包括它们的关联线程。 

历史检测记录 History usage history   显示重大的等待事件和阻塞事件的历史记录。 

监测使用状态 Monitor usage statistics   显示分组监测,线程和监测类的统计监测数据。

1.5.5 VM  自动勘测VMtelemetry Views

观察JVM的内部状态,JProfiler提供了不同的遥感勘测视图,堆 Heap   显示一个堆的使用状况和堆尺寸大小活动时间表。 

记录的对象 Recorded objects   显示一张关于活动对象与数组的图表的活动时间表。 

垃圾回收 Garbage collector   显示一张关于垃圾回收活动的活动时间表。 

类 Classes   显示一个与已装载类的图表的活动时间表。

线程 Threads   显示一个与动态线程图表的活动时间表。  

可以分别查看heap,eden,survivors,code_cache,permanent内存 使用情况。

并且对代码或者gc策略进行调优。

1.6jinfo

输出给定 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

1.7jstat

用来监视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

1.8jstack

为指定的线程输出 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

1.9jstatd

此命令是一个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 &

1.10jvisualvm

运行jvisualvm 首先需要先启动jstatd

1.11jconsole

待抽时间对每一种工具进行详细解说,互相勉励、互相学习。

JVM监控概述(图文)的更多相关文章

  1. JVM监控和调优常用命令工具总结

    JVM监控和调优 在Java应用和服务出现莫名的卡顿.CPU飙升等问题时总是要分析一下对应进程的JVM状态以定位问题和解决问题并作出相应的优化,在这过程中Java自带的一些状态监控命令和图形化工具就非 ...

  2. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  3. jvm 监控

    jvm监控可视化的有 jconsole .jmc .jvisualvm 其中jvisualvm开启一些监控会导致他自己关闭. 并且jdk下有很多工具可以进行jvm监控, jmap -histo:liv ...

  4. JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...

  5. JVM监控命令详解(转)

    JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...

  6. [java] JVM监控与调优

    原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html   光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...

  7. Java虚拟机(JVM)概述

    JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...

  8. JVM监控启动参数

    服务端: JVM监控启动参数 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=52001 -Dcom.sun.ma ...

  9. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...

随机推荐

  1. 【转】Oracle Outline使用方法及注意事项

    概要  Oracle Outline是用来保持SQL运行计划(execution plan)的一个工具. 我们能够通过outline工具防止SQL运行计划在数据库环境变更(如统计信息,部分參数等)而引 ...

  2. JSP简单的练习-功能标签

    <!-- userfn.jsp --> <%@ page contentType="text/html;charset=gb2312" %> <%@ ...

  3. Codeforces 487C. Prefix Product Sequence 逆+结构体

    意甲冠军: 对于数字n, 他询问是否有1~n置换 这种布置能够在产品上模每个前缀n 有可能0~n-1 解析: 通过观察1肯定要在首位,n一定要在最后 除4意外的合数都没有解 其它质数构造 a[i]=i ...

  4. SVD在推荐系统中的应用

    一.奇异值分解SVD 1.SVD原理 SVD将矩阵分为三个矩阵的乘积,公式: 中间矩阵∑为对角阵,对角元素值为Data矩阵特征值λi,且已经从大到小排序,即使去掉特征值小的那些特征,依然可以很好地重构 ...

  5. BMP文件格式及读写

    转 http://blog.csdn.net/pkueecser/article/details/5579604 http://blog.csdn.net/pkueecser/article/deta ...

  6. python派QQ邮件

    #encoding=utf-8 __author__ = 'ds' #文件名冲突 from email.mime.text import MIMEText import smtplib if __na ...

  7. 浅谈SQL注入风险 - 一个Login拿下Server(转)

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  8. android 拍照注意问题

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, reqCode) ...

  9. AMR音频文件格式分析

    AMR音频文件格式分析 1 概要 如今非常多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式.AMR,全称是:Adaptive Multi-Rate, ...

  10. EF中的transaction的使用范例

    注意一点: 在EF中使用事物后,对于一个新增的model,在saveChanges后,可以得到该实体的自增ID,但在提交事物之前, 该数据并没有真正的新增到DB中,但此时可以得到model新增的自增I ...