2014-12-19 77 views
1

环境: Glassfish的4.0(只有一个DAS),Windows Server 2012中R2,爪哇1.7.0_51 通过创建服务子命令创建DAS实例服务。Glassfish4日志循环 “最大历史文件” 的问题

问题: 文件属性已设置的最大的历史,但是,GlassFish服务器无法将旧的日志文件中删除,由于锁定文件server.log.lck

路径 - > 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”。但是,如果DAS实例在Windows Service中启动,则会自动生成锁定文件“server.log.lck”,并保留0KB直到停止服务,此文件将自动删除。

3,如果通过添加看门狗选项的命令“asadmin start-domain -w domain1”启动DAS实例,则会自动生成锁定文件“server.log.lck”并存在,直到停止服务。

4,出现锁定文件“server.log.lck”时,总会有一个java.exe进程存在。因此,从Windows Service启动DAS实例时,在该进程中运行两个“java.exe”,其中一个正在使用“server.log.lck”。

问题:

1,我想开始/由Windows服务停止DAS实例,而不是使用子命令。此外,我不想让所有Glassfish日志保留在我的服务器上,并且会导致磁盘已满,因此我更愿意打开Glassfish日志记录最大历史记录文件选项。有没有任何解决方法或解决方案?

2,这是Glassfish的缺陷还是只是一个设置问题?我确实尝试在其他服务器上安装,并且都有相同的问题。

3,为什么有两个java.exe进程在从Windows Server启动时运行,是第二个用于“看门狗”的进程?

非常感谢您的帮助,请让我知道是否有任何进一步的信息,你想知道或希望我做一些其他的测试。

回答

1

如果有人仍在挣扎,我找到了解决办法。 当您在Windows环境中通过asadmin create-service创建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> 

之后关掉这个功能服务将开始通过手动启动-domain命令状没有看门狗进程。 你应该在创建每一项服务之后做到这一点,它可能非常烦人,所以我做了进一步的研究。 事实证明,asadmin通过使用位于glassfish\lib\install\templates中的模板创建操作系统特定的domainService.xml。这些模板也是操作系统特定的。和模板的Windows(命名域的服务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

希望它有帮助。