2014-12-19 73 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

希望它有幫助。