3

我正在测试一个应用程序,我的应用程序抛出了 OutOfMemory 异常,但该进程仍然存在,正如我从 ProcessExplorer 中看到的那样。我以为它只是活着,在 OOM 之后没有做任何事情,但一段时间后我仍然看到一些应用活动。我有点惊讶。为什么会发生这种情况?

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid8920.hprof ...
Heap dump file created [2826469039 bytes in 59.888 secs]
Exception in thread "ActiveMQ Transport: tcp://localhost/127.0.0.1:61000@53335"
java.lang.OutOfMemoryError: Java heap space

我使用的 JVM 选项是:

-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -verbose:gc -Xloggc:C:/temp/GCVerbose.log

它是 64 位 Java 1.7。

编辑:::

我认为应用程序仍在做某事,因为在 OOM 异常之后我看到了更多与应用程序相关的日志消息。但几分钟后,我看到最终的异常堆栈如下所示,应用程序活动停止。但是这个过程仍然存在!

Exception in thread "pool-3-thread-1" java.lang.OutOfMemoryError: Java heap space
Exception in thread "ActiveMQ Session Task-13" java.lang.OutOfMemoryError: Java heap space
Feb 17, 2013 4:54:44 PM sun.rmi.transport.tcp.TCPTransport$AcceptLoop executeAcceptLoop
WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=53490] throws
java.lang.OutOfMemoryError: Java heap space
    at java.net.NetworkInterface.getAll(Native Method)
    at java.net.NetworkInterface.getNetworkInterfaces(NetworkInterface.java:326)
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:86)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:359)
    at java.lang.Thread.run(Thread.java:722)

Feb 17, 2013 4:57:34 PM ServerCommunicatorAdmin reqIncoming
WARNING: The server has decided to close this client connection.
Exception in thread "ActiveMQ InactivityMonitor Worker" java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
4

1 回答 1

1

尝试kill -3 <process-pid>打印 Java 线程转储并查看应用程序挂起的位置。

于 2013-02-18T02:16:23.427 回答