jmap -permstat需要很长时间并且挂起
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmap -permstat需要很长时间并且挂起相关的知识,希望对你有一定的参考价值。
我们开始看到'java.lang.OutOfMemoryError:PermGen space'。为了找出烫发空间里的东西,尝试跑步
'/usr/j2sdk1.6.0_13/bin/jmap -permstat 20476 -J-mx1280m> /tmp/permstats20476.txt&'
这个命令花了很长时间.....在它之间给出了以下异常:
查找类加载器实例..252829实习生字符串占用30781792字节。使用Printezis位查找对象大小并跳过...使用Printezis位查找对象大小并跳过...使用Printezis位查找对象大小并跳过...使用Printezis位查找对象大小并跳过...
完成。计算每个装载机stat ..done。请稍等..计算活跃度...................线程“Thread-1”中的异常java.lang.OutOfMemoryError:sun.jvm.hotspot超出了GC开销限制。 sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.access $ 1000(LinuxDebuggerLocal.java:51)sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal $ 1ReadBytesFromProcessTask.doit(调试器.linux.LinuxDebuggerLocal.readBytesFromProcess0(本地方法) LinuxDebuggerLocal.java:558)at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal $ LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:127)
但它没有完成......
[svcmig2 @ app430~] $ uname -a Linux app430 ... 2.6.18-194.el5#1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU / Linux
有没有其他替代nmap?这样我就可以快速获得烫发统计数据
有没有其他替代nmap?这样我就可以快速获得烫发统计数据
你可以自己做一个!在Serviceability Agent的帮助下,这很容易。
以下是您案例的示例:
import sun.jvm.hotspot.memory.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.tools.Tool;
public class PermTool extends Tool {
@Override
public void run() {
// Show PermGen object histogram
ObjectHistogram histo = new ObjectHistogram();
VM.getVM().getObjectHeap().iteratePerm(histo);
histo.print();
// List all classes in PermGen with their ClassLoaders
VM.getVM().getObjectHeap().iteratePerm(new DefaultHeapVisitor() {
@Override
public boolean doObj(Oop obj) {
if (obj instanceof InstanceKlass) {
obj.printValue();
Oop loader = ((InstanceKlass) obj).getClassLoader();
if (loader == null) {
System.out.println(" -- loaded by Bootstrap ClassLoader");
} else {
System.out.print(" -- loaded by ");
loader.printValue();
System.out.println();
}
}
return false;
}
});
}
public static void main(String[] args) {
new PermTool().start(args);
}
}
只需使用与目标进程相同的JDK编译并运行它。
确保jdk/lib/sa-jdi.jar
在CLASSPATH上。
- 您可以设置JVM args:
-XX:+HeapDumpOnOutOfMemoryError
以在出现oom时获取.hprof文件,然后使用mat来分析重复加载的类。 - 我已经为您的问题编写了一个SA工具类。我的JDK版本是1.8.0_151。
这是源代码:
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.tools.Tool;
/**
* @author duqi
* @createTime 2018/9/1 下午11:55
**/
public class PermTool extends Tool {
@Override
public void run() {
// Show PermGen object histogram
ObjectHistogram histo = new ObjectHistogram();
VM.getVM().getObjectHeap().iterate(histo);
histo.print();
// List all classes in PermGen with their ClassLoaders
VM.getVM().getObjectHeap().iterate(new DefaultHeapVisitor() {
@Override
public boolean doObj(Oop obj) {
if (obj.getKlass() instanceof InstanceKlass) {
obj.printValue();
Oop loader = ((InstanceKlass) obj.getKlass()).getClassLoader();
if (loader == null) {
System.out.println(" -- loaded by Bootstrap ClassLoader");
} else {
System.out.print(" -- loaded by ");
loader.printValue();
System.out.println();
}
}
return false;
}
});
}
public static void main(String[] args) {
new PermTool().execute(args);
}
}
以上是关于jmap -permstat需要很长时间并且挂起的主要内容,如果未能解决你的问题,请参考以下文章