Linux系統下啓動tomcat報錯【java.util.prefs.BackingStoreException: Couldn't get file lock】的解決方法

Linux環境下,啓動tomcat報出如題的警告信息,雖然對系統正常使用沒有多大影響,可是會致使tomcat的日誌垃圾信息不少,並且看起來很不爽。。。html

 

具體的警告信息以下:java

1 Jan 30, 2018 7:10:11 PM java.util.prefs.FileSystemPreferences checkLockFile0ErrorCode 2 WARNING: Could not lock System prefs. Unix error code 32672. 3 Jan 30, 2018 7:10:11 PM java.util.prefs.FileSystemPreferences checkLockFile0ErrorCode 4 WARNING: Could not lock System prefs. Unix error code 32672. 5 Jan 30, 2018 7:10:11 PM java.util.prefs.FileSystemPreferences syncWorld 6 WARNING: Couldn't flush system prefs: java.util.prefs.BackingStoreException: Couldn't get file lock. 7 Jan 30, 2018 7:10:11 PM java.util.prefs.FileSystemPreferences syncWorld 8 WARNING: Couldn't flush system prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.

 

具體針對這個問題,能夠查看java的api文檔:http://www.docjar.com/html/api/java/util/prefs/FileSystemPreferences.java.htmlvim

 

個人環境是JDK7,tomcat7. 當前用戶是tomcatapi

 

這裏記錄一下個人調查過程和方案。tomcat

 

《一》調查分析app

從上述api的說明文檔,WARNING的信息默認是30秒一次輸出,默認是指沒有配置JVM的參數"java.util.prefs.syncInterval"。less

/** * Sync interval in seconds. */
private static final int SYNC_INTERVAL = Math.max(1, Integer.parseInt(AccessController.doPrivileged(new sun.security.action.GetPropertyAction("java.util.prefs.syncInterval", "30"))));

 

另外結合輸出的warning信息,反查這個api的說明文檔,重點看java.util.prefs.userRootjava.util.prefs.systemRoot參數的配置,其實這兩個參數指定的是一個路徑。另外還要配置一下權限。這裏的權限主要有以下幾種:jvm

/** * Unix user write/read permission */
private static final int USER_READ_WRITE = 0600; private static final int USER_RW_ALL_READ = 0644; private static final int USER_RWX_ALL_RX = 0755; private static final int USER_RWX = 0700;

針對上述兩步,配置上路徑以及權限後,就應該能夠避免爆出WARNING提醒了。spa

 

《二》具體操做日誌

處理的辦法,簡單直接的辦法,就是在當前用戶的home目錄下作以下操做,先檢查/home/tomcat目錄下是否存在.java目錄,如有,就看看是否存在.systemPrefs和.userPrefs目錄,缺什麼就補充上什麼,最簡單的作法是刪除.java目錄,而後按下面步驟建立:

mkdir -p ~/.java/.systemPrefs mkdir -p ~/.java/.userPrefs chmod -R 700 ~/.java

完成上述操做後,再去修改相應的tomcat的啓動文件:

[tomcat@t0-tkol-ims-app01 bin]$ pwd /u02/tomcat/8080/bin

修改catalina.sh,在JAVA_OPTS最後面添加上-Djava.util.prefs.systemRoot=/home/tomcat/.java -Djava.util.prefs.userRoot=/home/tomcat/.java/.userPrefs

[tomcat@t0-tkol-ims-app01 bin]$ vim catalina.sh JAVA_OPTS=" -server -Xms2048M -Xmx2048M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=300M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Djava.util.prefs.systemRoot=/home/tomcat/.java -Djava.util.prefs.userRoot=/home/tomcat/.java/.userPrefs"

完成上述兩個步驟後,就是將tomcat進行重啓。查看tomcat的catalina.out的日誌,的確再也不出現上述開篇出現的WARNING信息了。

注意一點,就是關於systemRoot以及userRoot的參數配置信息,只要配置到jvm便可,至於在什麼文件裏面,是否是在catalina.sh,不是重點,重點是要告知jvm這些參數信息便可。

相關文章
相關標籤/搜索