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 に答える