Evi*_*kie 5 java windows service tomcat jvm-arguments
我在Windows下运行了针对Apache Tomcat的Java应用程序.有两种方法可以运行此应用程序 - 作为Windows服务,或从批处理文件手动调用Tomcat.
当我通过批处理文件启动应用程序时,我使用以下命令将GC日志添加到JVM参数:
-Xloggc=%~dp0..\logs\gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
Run Code Online (Sandbox Code Playgroud)
这会导致GC日志与文件名中的日期一起输出 - 但是当作为服务运行时,DATE和TIME变量无法正确解析.
使用Windows服务时,我必须在JVM参数中使用哪些变量来确保将日期和时间附加到GC日志中?
我试图简化它 - gc-%DATE%.log, gc-${DATE}.log在所有情况下变量都无法解决.
任何帮助表示赞赏!
编辑:请注意,当应用程序作为Windows服务运行时,任何解决方案都必须正常工作.独自站立很好,我们已经覆盖了.仅在使用Windows服务时才会这样.
编辑 - 使用Tomcat作为Windows服务
我已经使用文档将Tomcat安装为Windows服务.
然后我从Tomcat bin目录运行这个命令行:
"tomcat7.exe" //US//Tomcat7 ++JvmOptions=-Xloggc:gc-%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%_%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%.log
Run Code Online (Sandbox Code Playgroud)
注意://US是更新服务命令.Tomcat7是服务的名称.
然后重新启动服务,现在正确解析了日志路径.
假设您有现有目录,它应该工作.带有日期的表达式需要一个名为的目录,gc-2015.1并创建一个名为的文件.01_13.43.35.log(如果我们是2015年1月15日13h 43min 35sec)
如果你使用catalina.bat
为什么它不起作用?因为你遇到了延迟扩张的问题.
您必须使用setlocal ENABLEDELAYEDEXPANSIONin 启用延迟扩展catalina.bat
然后更换%带!.你最终会得到-Xloggc="!~dp0..\logs\gc-!DATE:~-4!.!DATE:~4,2!.!DATE:~7,2!_!TIME:~0,2!.!TIME:~3,2!.!TIME:~6,2!.log".
小智 5
使用 java 8,您可以访问两个非常有用的新替换。添加了 %t 和 %p,其中 %t 是时间戳,%p 是进程 ID。
-Xloggc:C:\logs\gc_%t_%p.log 将在 C:\logs 中生成一个类似这样命名的文件。
gc_2016-08-12_10-12-29_pid7320.log
Run Code Online (Sandbox Code Playgroud)
此功能没有很好地记录。我在这里发现了它: OpenJDK Bug JDK-6950794
因为我也希望它在 Windows 服务中工作,所以我已通过以下方式将此功能的使用添加到 tomcat service.bat 脚本中。
--JvmOptions "...;-Xloggc:%CATALINA_BASE%\logs\gc-%%t.log;..."
Run Code Online (Sandbox Code Playgroud)
请注意 %%t。需要额外的 % 作为转义字符。
| 归档时间: |
|
| 查看次数: |
4245 次 |
| 最近记录: |