2017-08-10 3 views
0

私はスプリングブートを使用してプロセスを開発しました。これは完了するまでに約7時間かかります。 初期バージョンでは、デバッグの目的で、多くの "System.out.println"呼び出しがあります。 eclipseでこのプロセスを実行すると、問題なく終了まで実行されます。 しかし、端末、ローカル、またはクラウドVMで直接実行した場合、2〜3時間後にアプリケーションが停止します。プロセスは生き残っていますが、デバッグメッセージは停止し、処理も停止します。System.out.printlnがJavaアプリケーションがハングする原因になる可能性はありますか?

このメッセージが何らかの形でクラッシュしたり、しばらくしてプロセスがブロックされている可能性はありますか?

trueの場合、私はそれがコンソールバッファの最大サイズの設定があり、これは停止するアプリケーションを防ぎ一度日食は、古いコンソールメッセージを破棄するためにいくつかのメカニズムを持っていることを想像することができます。

ありがとうございます!

EDIT:JimN提案後

は、スレッドから情報を抽出することについては、ここで私が見つけたものです:

2017-08-10 20:18:07 
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.111-b14 mixed mode): 

"JMX server connection timeout 210" #210 daemon prio=9 os_prio=31 tid=0x00007f8940994000 nid=0x5f07 in Object.wait() [0x000070000af63000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168) 
    - locked <0x000000076b9ea400> (a [I) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - None 

"RMI TCP Connection(16)-192.168.0.103" #209 daemon prio=9 os_prio=31 tid=0x00007f89416b9000 nid=0x6107 runnable [0x000070000ac59000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265) 
    - locked <0x000000076d161e10> (a java.io.BufferedInputStream) 
    at java.io.FilterInputStream.read(FilterInputStream.java:83) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:550) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$28/1628264240.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - <0x000000076bfcb750> (a java.util.concurrent.ThreadPoolExecutor$Worker) 

"RMI TCP Connection(15)-192.168.0.103" #202 daemon prio=9 os_prio=31 tid=0x00007f893fa2f000 nid=0x5d03 runnable [0x000070000ae5f000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265) 
    - locked <0x000000076b9e0b60> (a java.io.BufferedInputStream) 
    at java.io.FilterInputStream.read(FilterInputStream.java:83) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:550) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$28/1628264240.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - <0x00000007917cc068> (a java.util.concurrent.ThreadPoolExecutor$Worker) 

"RMI Scheduler(0)" #199 daemon prio=9 os_prio=31 tid=0x00007f894200a800 nid=0x5703 waiting on condition [0x000070000ab57000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x00000007917dab10> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - None 

"RMI TCP Accept-0" #197 daemon prio=9 os_prio=31 tid=0x00007f8940c4e800 nid=0x5303 runnable [0x000070000a951000] 
    java.lang.Thread.State: RUNNABLE 
    at java.net.PlainSocketImpl.socketAccept(Native Method) 
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409) 
    at java.net.ServerSocket.implAccept(ServerSocket.java:545) 
    at java.net.ServerSocket.accept(ServerSocket.java:513) 
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52) 
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:400) 
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:372) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - None 

"Attach Listener" #196 daemon prio=9 os_prio=31 tid=0x00007f8940b82800 nid=0x4dcb waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"DestroyJavaVM" #195 prio=5 os_prio=31 tid=0x00007f893e007800 nid=0x1c03 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"taskExecutor-2" #18 prio=5 os_prio=31 tid=0x00007f8940a36800 nid=0x5103 waiting on condition [0x000070000a84e000] 
    java.lang.Thread.State: WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x00000006c0c30a28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) 
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - None 

"taskExecutor-1" #16 prio=5 os_prio=31 tid=0x00007f8940a35800 nid=0x4f03 waiting on condition [0x000070000a74b000] 
    java.lang.Thread.State: WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x00000006c0c30a28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) 
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

    Locked ownable synchronizers: 
    - None 

"Abandoned connection cleanup thread" #13 daemon prio=5 os_prio=31 tid=0x00007f893cd67000 nid=0x1007 in Object.wait() [0x000070000a545000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) 
    - locked <0x00000006c0670568> (a java.lang.ref.ReferenceQueue$Lock) 
    at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) 

    Locked ownable synchronizers: 
    - None 

"Tomcat JDBC Pool Cleaner[705927765:1502393500924]" #12 daemon prio=5 os_prio=31 tid=0x00007f893db0d800 nid=0x140f in Object.wait() [0x000070000a442000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at java.util.TimerThread.mainLoop(Timer.java:552) 
    - locked <0x00000006c05939e0> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Timer.java:505) 

    Locked ownable synchronizers: 
    - None 

"Service Thread" #8 daemon prio=9 os_prio=31 tid=0x00007f893d000000 nid=0x4903 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"C1 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007f893e042000 nid=0x4703 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007f893e041800 nid=0x4503 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007f893e040000 nid=0x4303 waiting on condition [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007f893e03d000 nid=0x4103 runnable [0x0000000000000000] 
    java.lang.Thread.State: RUNNABLE 

    Locked ownable synchronizers: 
    - None 

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007f893d009800 nid=0x3103 in Object.wait() [0x0000700009d2d000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) 
    - locked <0x00000006c0025a38> (a java.lang.ref.ReferenceQueue$Lock) 
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) 
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) 

    Locked ownable synchronizers: 
    - None 

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007f893d002000 nid=0x2f03 in Object.wait() [0x0000700009c2a000] 
    java.lang.Thread.State: WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at java.lang.Object.wait(Object.java:502) 
    at java.lang.ref.Reference.tryHandlePending(Reference.java:191) 
    - locked <0x00000006c002d248> (a java.lang.ref.Reference$Lock) 
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) 

    Locked ownable synchronizers: 
    - None 

"VM Thread" os_prio=31 tid=0x00007f893e02c800 nid=0x2d03 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007f893e013000 nid=0x2503 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007f893e014000 nid=0x2703 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007f893e014800 nid=0x2903 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007f893e015000 nid=0x2b03 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007f893c800000 nid=0x4b03 waiting on condition 

JNI global references: 388 

はしかし、私はそれが何を意味するのかわかりません。

+0

私はコンソールがいっぱいになっているためにハングするEclipseプログラムを長く実行していることが多いです。 –

+0

コンソールにテキストを出力するのは、CPUの処理とメモリ操作に比べて時間がかかります。しかし、これは、システムがハングアップした場合に私がチェックする最初の場所ではありません。アプリケーションではほかに何がありますか? – Juan

+0

コンテンツがコンソールバッファを超えてしまうと、アプリケーションがハングすることは期待しません。あなたはおそらく、質問を返すバッファよりもさらにスクロールすることができないだろう - >これが実行されるとコンソールを見ているのは誰ですか? – ChiefTwoPencils

答えて

3

はい可能です。つまり、System.outに書き込み、プロセスの出力が消費されていない場合、最終的にプロセスの出力ストリームに関連付けられたバッファがいっぱいになり、System.out.println()を呼び出すスレッドがブロックされます。しかし、コンソールでプログラムを実行している場合、プロセスの出力がコンソールによって消費されているので、これは起こりません。

スレッドにJavaアプリケーションがハングアップしている場合は、スレッドダンプを取得してハングアップの原因を調べる必要があります。以下のツールは、スレッドダンプを生成できます。jstackjvisualvm。対話形式でスレッド状態を検査する場合は、jvisualvm,jconsoleまたはjmcを使用することもできます。これらのツールはすべてOracleのJDKに付属しています。

+0

私はjsoncoleを使用して私のプロセスに接続し、いくつか興味深いものを見つけました。 私は、サイズが2のスレッドプールエグゼキュータを持っています。ここ は、私はそれらのそれぞれのために見つけたものです: 名:のTaskExecutor-1 状態:ブロックされたjava.u[email protected]44d8e1f9 合計で待機中:12合計は待っていた:5 名:のTaskExecutor -2 状態:待機中java.u[email protected]44d8e1f9 合計ブロック数:18合計待機時間:7 –

関連する問題