変更内容
DASおよびGlassFish ServerインスタンスのJava VM終了時のメッセージ出力の出力内容が変更されます。
非互換
アプリケーションまたはGlassFishで以下のメソッドが実行された場合、Java VMログにスタックトレース情報が出力されます。
java.lang.System.exit()
java.lang.Runtime.exit()
java.lang.Runtime.halt()
これらのメソッドを実行しない場合は、Java VM終了時、Java VMの終了を通知するメッセージが出力されます。
スタックトレース情報、Java VMの終了を通知するメッセージは、以下の例のように出力されます。
例
スタックトレース情報の出力例
Thread dump at JVM_Halt(status code=0): "Thread-31" #145 daemon prio=5 os_prio=0 cpu=7.95ms elapsed=0.21s tid=0x00007f1b183afbf0 nid=0x3f915 runnable [0x00007f1af15d4000] java.lang.Thread.State: RUNNABLE at java.lang.Shutdown.halt0(java.base@17.0.8/Native Method) at java.lang.Shutdown.halt(java.base@17.0.8/Shutdown.java:151) - locked <0x00000000c0115c78> (a java.lang.Shutdown$Lock) at java.lang.Shutdown.exit(java.base@17.0.8/Shutdown.java:174) - locked <0x00000000ffe020b8> (a java.lang.Class for java.lang.Shutdown) at java.lang.Runtime.exit(java.base@17.0.8/Runtime.java:115) at java.lang.System.exit(java.base@17.0.8/System.java:1860) at com.sun.enterprise.v3.admin.StopServer.doExecute(StopServer.java:67) at com.sun.enterprise.v3.admin.cluster.StopInstanceInstanceCommand.execute(StopInstanceInstanceCommand.java:72) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:525) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:521) at java.security.AccessController.executePrivileged(java.base@17.0.8/AccessController.java:776) at java.security.AccessController.doPrivileged(java.base@17.0.8/AccessController.java:399) at javax.security.auth.Subject.doAs(java.base@17.0.8/Subject.java:376) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:520) at org.glassfish.api.AsyncImpl$1$1.run(AsyncImpl.java:52) #### JavaVM terminated: OpenJDK 64-Bit Server VM (17.0.8+3-2023-05-19-Fujitsu-B02 mixed mode, sharing), [pid=260139] TimeMillis=1684754298512 Time=Mon May 22 17:18:18 2023
Java VMの終了を通知するメッセージの出力例
#### JavaVM terminated: OpenJDK 64-Bit Server VM (17.0.8+7-2023-07-19-Fujitsu-B02 mixed mode, sharing), [pid=16760] TimeMillis=1689817347514 Time=Thu Jul 20 10:42:27 2023
アプリケーションまたはGlassFishで以下のメソッドが実行された場合、Java VMログにスタックトレース情報が出力されます。
java.lang.System.exit()
java.lang.Runtime.exit()
これらのメソッドを実行しない場合は、Java VM終了時、メッセージが出力されません。java.lang.Runtime.halt()メソッドの実行時にも、メッセージは出力されません。
スタックトレース情報は、以下の例のように出力されます。
例
スタックトレース情報の出力例
9月 02, 2024 1:32:39 午後 java.lang.Shutdown logRuntimeExit 普通: Runtime.exit() called with status: 0 java.lang.Throwable: Runtime.exit(0) at java.base/java.lang.Shutdown.logRuntimeExit(Shutdown.java:179) at java.base/java.lang.Shutdown.exit(Shutdown.java:160) at java.base/java.lang.Runtime.exit(Runtime.java:188) at java.base/java.lang.System.exit(System.java:1920) at com.sun.enterprise.v3.admin.StopServer.doExecute(StopServer.java:69) at com.sun.enterprise.v3.admin.cluster.StopInstanceInstanceCommand.execute(StopInstanceInstanceCommand.java:81) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:577) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:573) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/javax.security.auth.Subject.doAs(Subject.java:453) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:572) at org.glassfish.api.AsyncImpl$1$1.run(AsyncImpl.java:52)
対処方法
Java VMログの参照時、変更後の形式のスタックトレース情報を参照してください。
アプリケーションでjava.lang.Runtime.halt()を実行していて、java.lang.Runtime.halt()の実行時にスタックトレースを出力する必要がある場合、java.lang.Runtime.halt()の実行前にスタックトレースを出力する処理をアプリケーションで実装してください。