JDK监控命令

 

jstack   -l pid

解析:

daemon后台进程

prio=10 优先级是10 

tid在内存中的物理地址

nid线程id 16进制

WAITING 线程状态,可以是RUNNING ...


JDK监控命令_第1张图片
 

 

 

先简单介绍下常见dump 内存的两种方式

    XX:+HeapDumpOnOutOfMemoryError       

    jmap -dump:format=b,file=testdump.bin <pid>

 

jmap的常用命令:

   jmap -histo:live  pid  查看内存里面实例的内容以及数量

   jmap heap pid          查看内存中每个代内存的占有率

 

常用名词解释:

 Shallow size就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。

Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。

 

1.模拟堆内存溢出。

   code:

   

import java.util.ArrayList;
import java.util.List;

public class TestOOM {

	public static void main(String[] args) throws InterruptedException {
		
		List list=new ArrayList();
		OOM oom=new OOM();
		Thread.sleep(20*1000);
		for(int i=0;i<15;i++){
	//		System.out.println(i);
			list.add(new OOM());

			Thread.sleep(2*1000);
		}
		
	}
	
}

class OOM{
	
	byte[] bytes=new byte[1024*1024*8];
	
}

 

 

2.模拟常量池溢出。

    code:

import java.util.ArrayList;
import java.util.List;

public class OOM2 {
	
	public static void main(String[] args) throws InterruptedException {
		
		List list=new ArrayList();
		Thread.sleep(10*1000);
		for(int i=0;i<10000000;i++){
			list.add(String.valueOf(i).intern());
		}
		
	}

}

   java -Xmx1020m -Xms1020m -XX:PermSize=50m  -XX:MaxPermSize=50m -XX:+HeapDumpOnOutOfMemoryError  OOM2

  可以发现跑了一会,会出现OOM。

  
JDK监控命令_第2张图片
 此时dump文件已经生成了就可以用MAT工具打开了。

 

   

mat分析详细截图下次再补充下吧。

  参考一下文档:

   http://www.blogjava.net/rosen/archive/2010/05/21/321575.html

   http://www.blogjava.net/rosen/archive/2010/06/13/323522.html

你可能感兴趣的:(jdk)