环境: Glassfish 4.0(只有一个DAS),Windows Server 2012 R2,Java 1.7.0_51 使用create-service子命令创建DAS实例服务。
问题: 已设置最大历史记录文件属性,但由于锁定文件server.log.lck,Glassfish Server无法删除旧的日志文件
路径 - > C:\ glassfish4 \ GlassFish的\域\ DOMAIN1 \设置\ logging.properties com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles = 10
日志摘录:
[2014-12-10T18:00:39.372+0900] [glassfish 4.0] [SEVERE] [] [] [tid: _ThreadID=16 _ThreadName=Thread-5] [timeMillis: 1418202039372] [levelValue: 1000] [[
java.util.logging.ErrorManager: 0: FATAL ERROR: COULD NOT DELETE LOG FILE.]]
[2014-12-10T18:00:39.372+0900] [glassfish 4.0] [SEVERE] [] [] [tid: _ThreadID=16 _ThreadName=Thread-5] [timeMillis: 1418202039372] [levelValue: 1000] [[
java.io.IOException: Could not delete log file: C:\glassfish4\glassfish\domains\domain1\logs\server.log.lck
at com.sun.enterprise.server.logging.GFFileHandler.cleanUpHistoryLogFiles(GFFileHandler.java:725)
at com.sun.enterprise.server.logging.GFFileHandler$4.run(GFFileHandler.java:802)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.enterprise.server.logging.GFFileHandler.rotate(GFFileHandler.java:744)
at com.sun.enterprise.server.logging.GFFileHandler$1.run(GFFileHandler.java:301)
at com.sun.enterprise.server.logging.LogRotationTimerTask.run(LogRotationTimerTask.java:68)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)]]
调查结果:
1,如果日志文件夹中存在锁定文件“server.log.lck”,则会出现问题,并且每当Glassfish服务器尝试删除旧日志文件时,都可以在日志中找到上述错误。如果日志文件夹中没有“server.log.lck”,则没有任何问题并且正常工作。
2,如果通过命令“asadmin start-domain domain1”启动DAS实例,则日志文件夹中不会生成锁定文件“server.log.lck”。但是如果在Windows服务中启动DAS实例,则会自动生成锁定文件“server.log.lck”并保留0KB直到停止服务,此文件将自动删除。
3,如果DAS实例由添加了watchdog选项的“asadmin start-domain -w domain1”命令启动,则将自动生成锁定文件“server.log.lck”,直到停止服务为止。
4,当出现锁定文件“server.log.lck”时,总会有一个java.exe进程存在。因此,从Windows服务启动DAS实例时,进程中运行两个“java.exe”,其中一个使用“server.log.lck”。
问题:
1,我想通过Windows服务启动/停止DAS实例,而不是使用子命令。此外,我不想将所有Glassfish日志保留在我的服务器上,这将导致磁盘已满问题,因此我更愿意打开Glassfish日志记录最大历史文件选项。有没有解决方法或解决方案呢?
2,这是Glassfish的缺陷还是仅仅是一个设置问题?我确实尝试在其他服务器上安装,但都有同样的问题。
3,为什么从Windows Server启动时有两个运行的java.exe进程是第二个用于“看门狗”的进程?
非常感谢您的帮助,如果您想了解更多信息或希望我做其他测试,请告诉我。
答案 0 :(得分:1)
如果有人还在努力,我找到了解决方案。
通过asadmin create-service
在Windows环境中创建GF服务时,GF会在domain1Service.xml
中创建一个文件glassfish\domains\domain1\bin
,其中包含要启动服务器的参数。
它看起来像下面的
<service>
<id>domain1</id>
<name>domain1 GlassFish Server</name>
<description>GlassFish Server</description>
<executable>C:/Supertel-NMSv3/glassfish-4.1/glassfish/lib/nadmin.bat</executable>
<logpath>C:\\Supertel-NMSv3\\glassfish-4.1\\glassfish\\domains/domain1/bin</logpath>
<logmode>reset</logmode>
<depend>tcpip</depend>
<startargument>start-domain</startargument>
<startargument>--watchdog</startargument>
<startargument>--domaindir</startargument>
<startargument>C:\\Supertel-NMSv3\\glassfish-4.1\\glassfish\\domains</startargument>
<startargument>domain1</startargument>
<stopargument>stop-domain</stopargument>
<stopargument>--domaindir</stopargument>
<stopargument>C:\\Supertel-NMSv3\\glassfish-4.1\\glassfish\\domains</stopargument>
<stopargument>domain1</stopargument>
</service>
行<startargument>--watchdog</startargument>
负责启动监视程序进程,以防止删除日志文件。
你不能只删除这个startargument部分(该服务不会开始),但你可以通过设置false
这样的标志来关闭它
<startargument>--watchdog=false</startargument>
之后,服务将通过手动启动域命令启动,无需看门狗进程。
你应该在每次创建服务后都这样做,这可能非常烦人,所以我做了进一步的研究。
事实证明,asadmin通过使用位于glassfish\lib\install\templates
的模板创建特定于操作系统的domainService.xml。这些模板也是特定于操作系统的。 Windows的模板(名为Domain-service-winsw.xml.template)看起来像这样
<service>
<id>%%%NAME%%%</id>
<name>%%%DISPLAY_NAME%%%</name>
<description>GlassFish Server</description>
<executable>%%%AS_ADMIN_PATH%%%</executable>
<logpath>%%%LOCATION%%%/%%%ENTITY_NAME%%%/bin</logpath>
<logmode>reset</logmode>
<depend>tcpip</depend>
<startargument>%%%START_COMMAND%%%</startargument>
<startargument>--watchdog</startargument>
%%%CREDENTIALS_START%%%%%%LOCATION_ARGS_START%%%<startargument>%%%ENTITY_NAME%%%</startargument>
<stopargument>%%%STOP_COMMAND%%%</stopargument>
%%%CREDENTIALS_STOP%%%%%%LOCATION_ARGS_STOP%%%<stopargument>%%%ENTITY_NAME%%%</stopargument>
</service>
因此,您可以通过设置参数--watchdog=false
直接编辑模板,此更改将反映在将来创建的所有文件中domainService.xml
希望它有所帮助。