다음은 동작입니다.Java 로깅 프레임 워크를 사용한 교착 상태
파일을 콘솔에 매우 자주 기록하는 응용 프로그램을 실행합니다. 오늘 아침에 끊었습니다. 스레드가 실행 한 메서드가 한 시간 이상 반환되지 않았습니다. 커맨드 라인에서 엔터를 누르면, 계속됩니다. 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 [email protected]
java.io.PrintStream.write(PrintStream.java:480)
- locked [email protected]
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 [email protected]
java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
java.util.logging.StreamHandler.flush(StreamHandler.java:242)
- locked [email protected]
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)
누군가가 나에게 잘못 될 수 있는지에 대한 도움말을 줄 수 : 여기
한 시간 이상 동안 실행 방법에 대한 로그입니다?
내가 파일을 기다리고 있었다고 말하면 다른 스레드/프로세스가 파일을 잠근 것입니까? – Taylor
나는 별도의 인스턴스를 실행했지만, 첫 번째 인스턴스에만 FileHandler (첫 번째 인스턴스 만 로그 파일에 썼음)가 있는지 확인했습니다. 로그 파일에 기록하는 것은 없습니다. 이것은 첫 번째 인스턴스의 로그입니다 (두 번째 인스턴스가 중단되지 않았습니다). 또한, 둘 다 동시에 쓰기를하더라도, 두 번째 인스턴스는 보조 파일 log.log2를 작성하고 거기에 쓰게됩니다. – jn1kk