首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Glassfish4日志旋转“最大历史文件”问题

Glassfish4日志旋转“最大历史文件”问题
EN

Stack Overflow用户
提问于 2014-12-19 06:25:01
回答 2查看 1.6K关注 0票数 1

环境: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

日志片段:

代码语言:javascript
复制
[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进程在运行,第二个进程是否用于“看门狗”?

非常感谢您的帮助,如果您想知道或希望我做其他测试,请告诉我更多的信息。

EN

回答 2

Stack Overflow用户

发布于 2018-03-05 11:24:15

万一有人还在挣扎,我找到了解决办法。当您通过asadmin create-service在Windows环境中创建GF服务时,GF在glassfish\domains\domain1\bin中创建一个文件domain1Service.xml,其中包含用于服务器启动的参数。它看起来如下所示

代码语言:javascript
复制
    <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标志来关闭它

代码语言:javascript
复制
<startargument>--watchdog=false</startargument>

在此之后,服务将启动,就像通过手动启动域命令,而不带监视狗进程。您应该在每次创建服务之后都这样做,这可能会很烦人,所以我做了进一步的研究。事实证明,通过使用位于domainService.xml中的模板,asadmin创建了特定于操作系统的glassfish\lib\install\templates,这些模板也是操作系统特定的。Windows的模板(名为Domain winsw.xml.Template)如下所示

代码语言:javascript
复制
    <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中。

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2021-11-15 10:50:54

这不是正确的解决办法。看门狗有一个重要的功能:它监视服务是否正在运行。没有看门狗,glassfish就能正确启动,但不久之后,系统就不知道服务是否仍在运行或可能崩溃。在Services中,只有“开始”按钮是活动的(总是!)不能使用“停止”和“重新启动”。正确的解决方案是更改锁定文件的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27560760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档