下面是我们的行为:
我运行这个应用程序,它经常将内容记录到文件和控制台。今天早上就挂了。由线程运行的方法有一个多小时没有返回。一旦我在命令行上按enter键,它就会继续运行。使用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)有人能给我一些提示,说明什么可能是错误的,如何解决,是否有资源可以查看?
发布于 2013-12-13 16:10:04
一旦我在命令行上按enter键,它就会继续运行。
似乎控制台请求阻止输出。
例如,流程文档列出了以下警告:
由于一些本机平台只为标准输入和输出流提供有限的缓冲区大小,因此未能及时写入输入流或读取子进程的输出流可能会导致子进程阻塞,甚至导致死锁。
甚至控制台也是一个进程。
https://stackoverflow.com/questions/20101213
复制相似问题