环境:GlassFIS4.0(只有一个DAS),Windows 2012 R2,1.7.0_51使用Create子命令创建DAS实例服务。
问题:最大历史文件属性已经设置,但是Glassfish服务器由于锁文件server.log.lck无法删除旧日志文件
路径-> C:\glassfish4\glassfish\domains\domain1\config\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,如果DAS实例是由命令“asadmin start-domain1”启动的,则日志文件夹中没有生成锁文件“server.log.lck”。但是,如果DAS实例是在Windows中启动的,锁文件“server.log.lck”将自动生成,并保持0KB直到停止服务,该文件将被自动删除。
3 .如果DAS实例是由添加了看门狗选项的命令“asadmin start-domain -w domain1”启动的,则将自动生成锁文件“server.log.lck”,直到停止服务为止。
4 .当锁文件“server.log.lck”出现时,始终有一个java.exe进程存在。因此,当从Windows启动DAS实例时,进程中运行着两个“java.exe”,其中一个正在使用“server.log.lck”。
问题:
1,我想通过Windows Service启动/停止DAS实例,而不是使用子命令。此外,我不想把所有的Glassfish日志保存在我的服务器上,这会导致磁盘满载问题,因此我更愿意打开Glassfish日志记录最大历史文件选项。有什么解决办法或解决办法吗?
2,这是玻璃鱼的缺陷,还是一个设置的问题?我确实尝试过在其他服务器上安装,而且都有相同的问题。
3,如果从Windows启动,为什么有两个java.exe进程在运行,第二个进程是否用于“看门狗”?
非常感谢您的帮助,如果您想知道或希望我做其他测试,请告诉我更多的信息。
发布于 2018-03-05 11:24:15
万一有人还在挣扎,我找到了解决办法。当您通过asadmin create-service在Windows环境中创建GF服务时,GF在glassfish\domains\domain1\bin中创建一个文件domain1Service.xml,其中包含用于服务器启动的参数。它看起来如下所示
<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>在此之后,服务将启动,就像通过手动启动域命令,而不带监视狗进程。您应该在每次创建服务之后都这样做,这可能会很烦人,所以我做了进一步的研究。事实证明,通过使用位于domainService.xml中的模板,asadmin创建了特定于操作系统的glassfish\lib\install\templates,这些模板也是操作系统特定的。Windows的模板(名为Domain 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>因此,您可以通过设置param --watchdog=false直接编辑模板,此更改将反映在所有未来创建的文件domainService.xml中。
希望能帮上忙。
发布于 2021-11-15 10:50:54
这不是正确的解决办法。看门狗有一个重要的功能:它监视服务是否正在运行。没有看门狗,glassfish就能正确启动,但不久之后,系统就不知道服务是否仍在运行或可能崩溃。在Services中,只有“开始”按钮是活动的(总是!)不能使用“停止”和“重新启动”。正确的解决方案是更改锁定文件的路径。
https://stackoverflow.com/questions/27560760
复制相似问题