1

日志显示,我的代码将在几个小时内关闭

java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.io.FileDescriptor.<init>(FileDescriptor.java:62)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:217)
        at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink$Boss.run(NioServerSocketPipelineSink.java:235)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

如何跟踪这样的问题?有什么工具可以帮忙吗?堆栈没有指向我代码中的任何行。

4

3 回答 3

3

堆转储是需要分析的,以找出内存泄漏的根本原因。

jhat和 jprofiler 等工具,将用于分析堆转储。

于 2012-08-02T21:58:29.167 回答
2

有很多工具可以监控 Java 应用程序的 cpu 和内存使用情况。例如,在 JDK 1.6 中,您可以找到jvisualvm分析工具。还有 Sun Profiling Studio,其中包含collect可与-j选项一起使用的命令(有关详细信息,请参阅文档)。

PS collect命令提供了很多乐趣——它可以显示实际执行的汇编代码。

于 2012-08-02T21:58:43.997 回答
0

你有很多选择来解决你的麻烦。这里有免费的监控工具,看这个

于 2012-08-03T04:51:45.107 回答