使用Java Logging Framework进行死锁

时间:2013-11-20 16:19:14

标签: java logging deadlock

以下是行为:

我运行的应用程序经常将内容记录到文件和控制台。今天早上它被挂断了。一个线程运行的方法没有返回超过一个小时。一旦我按下命令行进入,它继续。使用JConsole,我能够提取我看到的唯一可疑的东西(JConsole没有检测到任何死锁)。

以下是运行一个多小时的方法的日志:

Name: Thread-4
State: RUNNABLE
Total blocked: 38  Total waited: 56,153

Stack trace: 

java.io.FileOutputStream.writeBytes(Native Method)
java.io.FileOutputStream.write(FileOutputStream.java:318)
java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
   - locked java.io.BufferedOutputStream@9b96a26
java.io.PrintStream.write(PrintStream.java:480)
   - locked java.io.PrintStream@6be7e9c6
sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
   - locked java.io.OutputStreamWriter@46a4fd82
java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
java.util.logging.StreamHandler.flush(StreamHandler.java:242)
   - locked java.util.logging.ConsoleHandler@79ff8609
java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:106)
java.util.logging.Logger.log(Logger.java:522)
java.util.logging.Logger.doLog(Logger.java:543)
java.util.logging.Logger.log(Logger.java:607)
com.mycomp.myproj.util.Log.log(Log.java:126)
com.mycomp.myproj.util.Log.logWarning(Log.java:79)
com.mycomp.myproj.eng.engine.runEngine(RunEngine.java:397)
com.mycomp.myproj.eng.engine.runEngine(RunEngine.java:297)
com.mycomp.myproj.eng.engine.runEngine(RunEngine.java:288)
com.mycomp.myproj.ModelYear.runYear(ModelYear.java:118)
com.mycomp.myproj.Monitor.runModel(Monitor.java:749)
com.mycomp.myproj.MonitorThread.run(MonitorThread.java:37)

有人可以给我一些关于可能出错的提示,如何解决,有资源查看吗?

1 个答案:

答案 0 :(得分:0)

  

我按下命令行后输入,继续。

似乎控制台正在请求阻止输出。

例如,Process文档列出了以下警告:

  

由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞甚至死锁。

即使是控制台也是一个过程。