java - 使用 Java 日志框架的死锁

标签 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)

谁能给我一些提示,告诉我可能出了什么问题,如何解决,是否可以查看资源?

最佳答案

Once I pressed enter on command line, it continued on.

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

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

Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, or even deadlock.

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

关于java - 使用 Java 日志框架的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101213/

相关文章:

java - 共享音频按钮

azure - 为什么 .show 查询在 Azure App Insights 日志查询中不起作用?

logging - Enterprise Library 5.0 - 将自定义标记添加到 TextFormatter

ios - 调试时是否可以查看iOS应用程序沙箱中的文件内容?

sql-server - SQL Server - 聚集索引上的死锁

java - 如何检测死锁?同步块(synchronized block)超时?

java - 如何运行每月向客户发送一次账单的程序?

java - 为什么这个方法的时间复杂度是2*O(n log n) + O(m log m)?

java - 指向数组的 Java 堆栈会使用相同数量的内存吗?

sql-server - 如何识别 SQL Azure 中的死锁?