在OutOfMemoryException之后,Java Process并没有死亡

时间:2013-02-17 22:00:41

标签: java garbage-collection jvm out-of-memory

我正在测试一个应用程序,我的应用程序抛出了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。

EDIT :::

我认为应用程序仍在执行某些操作,因为在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

1 个答案:

答案 0 :(得分:1)

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