欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > jmap命令 linux jmap如何使用
jmap命令 linux jmap如何使用
2020-04-19 06:40:11 来源:朵拉利品网

1, linux jmap如何使用



jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小。
命令格式:
jmap [options] pid
-dump:[live,]format=b,file=
--dump堆到文件,live指明是活着的对象,file指定文件名
-finalizerinfo 打印等待回收对象的信息
-J 提供jvm选项,如:-J-Xms256m

2, 怎样使用jstack诊断Java应用程序故障



如果单靠通过查看代码是很难去发现这个问题,在这一次故障排查中,我也学到了怎样更好的使用jvm监控工具来进行诊断,主要用到了jstack和jmap命令,jmap上次已经讲过就不再讲了,下面就一个例子来讲怎么使用jstack来对的Java程序进行诊断。
首先让我们来了解一下jstack这个命令的作用,jstack 是一个可以返回在应用程序上运行的各种各样线程的一个完整转储的实用程序,您可以使用它查明问题。jstack [-l] <pid>,jpid可以通过使用jps命令来查看当前Java程序的jpid值,-l是可选参数,它可以显示线程阻塞/死锁情况。
/**
* 死锁例子
* @author crane.ding
* @since 2011-3-20
*/
public class DeadLock {
public static void main(String[] args) {
final Object obj_1 = new Object(), obj_2 = new Object();
Thread t1 = new Thread("t1"){
@Override
public void run() {
synchronized (obj_1) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
synchronized (obj_2) {
System.out.println("thread t1 done.");
}
}
}
};
Thread t2 = new Thread("t2"){
@Override
public void run() {
synchronized (obj_2) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
synchronized (obj_1) {
System.out.println("thread t2 done.");
}
}

3, jmap dump文件怎么打开



首先用jmap命令查看该进程的jvm参数,其中
PS Perm Generation
capacity = 268435456 (256.0MB)
used = 25061360 (23.900375366210938MB)
free = 243374096 (232.09962463378906MB)
9.336084127426147% used
capacity 代表者你的永久代最大内存
used代表已经使用
如果capacity过小会导致java.lang.OutOfMemoryError: PermGen space
楼上2位都给出了如何调整该参数

4, java中毫无征兆的内存溢出有可能来自哪里



java dump heap 是分配给实例类和数组对象运行数据区,所有java线程在运行期间共享heap中的数据。Java heap dump相当于java应用在运行的时候在某个时间点上打了个快照(snapshot)。
有java dump文件生成的方式如下:
1.使用$JAVA_HOME/bin/jmap -dump来触发,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out
2.使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>;操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在java应用的根目录下面。
3.在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。
4.使用hprof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。

名词解释


MB

MB,英文简写,计算机中的一种储存单位,全称MByte。 MB(全称MByte):计算机中的一种储存单位,读作“兆”。数据单位MB与Mb(注意B字母的大小写)常被误认为是一个意思,其实MByte含义是“兆字节”,Mbit的含义是“兆比特”。MByte是指字节数量,Mbit是指比特位数。MByte中的“Byte”虽然与Mbit中的“bit”翻译一样,都是比特,也都是数据量度单位,但二者是完全不同的。Byte是“字节数”,bit是“位数”,在计算机中每八位为一字节,也就是1Byte=8bit,是1:8的对应关系。因此在书写单位时一定要注意B字母的大小写和含义。

参数

参数(parameter)是一个数学概念,指在问题中提供参考(不属于必须研究范围)的变量。 我们在研究当前问题的时候,关心某几个变量的变化以及它们之间的相互关系,其中有一个或一些叫自变量,另一个或另一些叫因变量。如果我们引入一个或一些另外的变量来描述自变量与因变量的变化,引入的变量本来并不是当前问题必须研究的变量,我们把这样的变量叫做参变量或参数。