Weblogic啓動時報不能鎖定AdminServer.lok文件的錯誤

這個問題的處理是刪除鎖定文件,並且查看文件的所屬用戶以及所分配的權限。



weblogic的版本是10.3,操作系統是linux,安裝weblogic創建了一個weblogic用戶,由於使用root用戶修改了一些性能參數後,使用了root用戶啓動了一次weblogic,而原來啓動weblogic的腳本是使用了weblogic用戶,在使用weblogic用戶啓動weblogic時出現了不能鎖定AdminServer.lok文件的錯誤,具體錯誤信息如下所示:

[weblogic@localhost ~]$  cd /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/bin
[weblogic@localhost bin]$ ./startWebLogic.sh
.
.
JAVA Memory arguments: -Xms1024m -Xmx2048m -XX:CompileThreshold=8000 -XX:PermSize=256m  -XX:MaxPermSize=512m
.
WLS Start Mode=Development
.
CLASSPATH=/home/weblogic/Oracle/Middleware/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/home/weblogic/Oracle/Middleware/patch_ocp371/profiles/default/sys_manifes
t_classpath/weblogic_patch.jar:/usr/java64/jdk1.6.0_45/lib/tools.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/weblogic_sp.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/
server/lib/weblogic.jar:/home/weblogic/Oracle/Middleware/modules/features/weblogic.server.modules_10.3.6.0.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/webservices.jar:/home
/weblogic/Oracle/Middleware/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/home/weblogic/Oracle/Middleware/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:/home/weblogic/Oracle/Mi
ddleware/wlserver_10.3/common/derby/lib/derbyclient.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/xqrl.jar:.:/usr/java64/jdk1.6.0_45/lib:/usr/java64/jdk1.6.0_45/lib/dt.jar:/u
sr/java64/jdk1.6.0_45/lib/tools.jar
.
PATH=/home/weblogic/Oracle/Middleware/wlserver_10.3/server/bin:/home/weblogic/Oracle/Middleware/modules/org.apache.ant_1.7.1/bin:/usr/java64/jdk1.6.0_45/jre/bin:/usr/java64/jdk1.6.0_45/bin:/
usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java64/jdk1.6.0_45/bin:/home/weblogic/bin
.
***************************************************
*  To start WebLogic Server, use a username and   *
*  password assigned to an admin-level user.  For *
*  server administration, use the WebLogic Server *
*  console at http://hostname:port/console        *
***************************************************
starting weblogic with Java version:
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Starting WLS with line:
/usr/java64/jdk1.6.0_45/bin/java -client   -Xms1024m -Xmx2048m -XX:CompileThreshold=8000 -XX:PermSize=256m  -XX:MaxPermSize=512m -Dweblogic.Name=AdminServer -Djava.security.policy=/home/webl
ogic/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy  -Xverify:none  -da -Dplatform.home=/home/weblogic/Oracle/Middleware/wlserver_10.3 -Dwls.home=/home/weblogic/Oracle/Middleware
/wlserver_10.3/server -Dweblogic.home=/home/weblogic/Oracle/Middleware/wlserver_10.3/server   -Dweblogic.management.discover=true  -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToCon
sole= -Dweblogic.ext.dirs=/home/weblogic/Oracle/Middleware/patch_wls1036/profiles/default/sysext_manifest_classpath:/home/weblogic/Oracle/Middleware/patch_ocp371/profiles/default/sysext_mani
fest_classpath  weblogic.Server
bea -000362 server failed. Reason:

There are 1 nested errors:

weblogic.management.ManagementException: Unable to obtain lock on /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/tmp/AdminServer.lok. Server may already b
e running
        at weblogic.management.internal.ServerLocks.getServerLock(ServerLocks.java:206)
        at weblogic.management.internal.ServerLocks.getServerLock(ServerLocks.java:67)
        at weblogic.management.internal.DomainDirectoryService.start(DomainDirectoryService.java:74)
        at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesManager.java:461)
        at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServicesManager.java:166)
        at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:881)
        at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:568)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:469)
        at weblogic.Server.main(Server.java:71)


出現這種情況的原因有兩種可能但不限於,一是執行kill -9殺死weblogic進程,一種是使用的不是安裝weblogic的用戶比如root用戶來啓動weblogic。這裏出現這種情況之前,既使用了kill -9殺死weblogic進程,也使用root用戶(而不是weblogic用戶)來啓動weblogic。

對於這種情況解決方法有以下三種
1.是修改AdminServer.lok文件的權限,讓weblogic用戶能鎖定它.
2.刪除AdminServer.lok文件並重新使用weblogic用戶來啓動weblogic服務.
3.殺死仍然運行的服務進程並重新weblogic服務.

這裏我採用的是第一種解決方法:

[root@localhost bin]# cd /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/tmp/
[root@localhost tmp]# ls -lrt
total 12
drwxr----- 5 weblogic bea  4096 Dec 29 19:09 _WL_internal
drwxr----- 3 weblogic bea  4096 Mar 17 17:53 _WL_user
-rw-r----- 1 weblogic bea   264 Apr 21 17:11 WebServiceUtils.ser
-rw-r----- 1 root     root    0 Apr 21 17:24 AdminServer.lok
[root@localhost tmp]# chown weblogic:bea AdminServer.lok
[root@localhost tmp]# ls -lrt
total 12
drwxr----- 5 weblogic bea 4096 Dec 29 19:09 _WL_internal
drwxr----- 3 weblogic bea 4096 Mar 17 17:53 _WL_user
-rw-r----- 1 weblogic bea  264 Apr 21 17:11 WebServiceUtils.ser
-rw-r----- 1 weblogic bea    0 Apr 21 17:24 AdminServer.lok

第二種方法,刪除AdminServer.lok文件並重新使用weblogic用戶來啓動weblogic服務的操作示例如下:
1. 在user_projects/domains/目錄中移動或刪除它被鎖定的文件,例如:

$ find . -name "*DAT"
./servers/AdminServer/data/store/diagnostics/WLS_DIAGNOSTICS000000.DAT
./servers/AdminServer/data/store/default/_WLS_ADMINSERVER000000.DAT

這裏要注意的是Unix或Linux是大小敏感的,在執行查找時不要將"*DAT"寫成".dat",如果寫成".dat"可能刪除將?/security/SerializedSystemIni.dat文件刪除。

2.刪除EmbeddedLDAP.lok and AdminServer.lok 文件

[root@localhost tmp]rm  -rf /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/tmp/AdminServer.lok


[root@localhost tmp]rm  -rf
/home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/data/ldap/ldapfiles/EmbeddedLDAP.lok

3.可以執行下面的腳本來找出進程正在監聽的端口並通過kill -TERM將其殺掉。

#!/bin/ksh

line='---------------------------------------------'
pids=$(/usr/bin/ps -ef | sed 1d | awk '{print $2}')

if [ $# -eq 0 ]; then
   read ans?"Enter port you would like to know pid for: "
else
   ans=$1
fi

for f in $pids
do
   /usr/proc/bin/pfiles $f 2>/dev/null | /usr/xpg4/bin/grep -q "port: $ans"
   if [ $? -eq 0 ]; then
      echo $line
      echo "Port: $ans is being used by PID:\c"
      /usr/bin/ps -ef -o pid -o args | egrep -v "grep|pfiles" | grep $f
   fi
done
exit 0

4.重新啓動weblogic服務

[weblogic@localhost bin]$nohup ./startWebLogic.sh &

第三種方法,殺死仍然運行的服務進程並重新weblogic服務的示例操作如下:
1. 找到Managed Server的:

ps -ef | grep ManagedServer

2.使用kill -9 殺掉Managed Server進程:

kill -9 

3. 重新啓動weblogic服務:

nohup ./startWebLogic.sh &

要注意的是startWeblogic.sh腳本通常要使用nohup來啓動,這樣當用戶退出時shell才能保持繼續運行.

如果是Windows平臺
1. AdminServer.lok 文件的缺存儲目錄是: C:\Oracle\Middleware\user_projects\domains\\servers\AdminServer\tmp\
2. 執行startWebLogic.cmd 命令來啓動weblogic服務
注意,如果AdminServer.lok 不能刪除可以在任務管理器中殺掉Weblogic服務的所有java.exe進程,再來刪除AdminServer.lok file。

在解決不能鎖定AdminServer.lok文件之後我們再來使用weblogic用戶啓動weblogic服務:

[weblogic@localhost bin]$ ./startWebLogic.sh
...省略...
an error occurred while initializing the Embedded LDAP Server. The exception thrown is java.lang.ClassCastException: com
.octetstring.vde.backend.BackendRoot cannot be cast to com.octetstring.vde.backend.standard.BackendStandard. This may indicate a problem with the data files for the Embedded LDAP Server. If
the problem is with the data files and it can not be corrected, backups of previous versions of the data files exist in /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers
/AdminServer/data/ldap/backup
bea -000362 server failed. Reason:

There are 1 nested errors:

java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot cannot be cast to com.octetstring.vde.backend.standard.BackendStandard
        at weblogic.ldap.EmbeddedLDAP.start(EmbeddedLDAP.java:303)
        at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

出現的錯誤是沒有權限打開事務文件EmbeddedLDAP.tran,這還是權限原因:

/home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/data/
ldap/ldapfiles/EmbeddedLDAP.tran (Permission denied)

修改EmbeddedLDAP.tran 文件的權限:

[root@localhost weblogic]# cd /home/weblogic/Oracle/Middleware/user_projects/domains/sbkwsjb/servers/AdminServer/data/ldap/ldapfiles/
[root@localhost ldapfiles]# ls -lrt
total 164
-rw-r----- 1 weblogic bea     864 Dec 30 09:01 EmbeddedLDAP.index
-rw-r----- 1 weblogic bea     204 Dec 30 09:01 EmbeddedLDAP.delete
-rw-r----- 1 weblogic bea  146088 Apr 21 16:16 EmbeddedLDAP.data
-rw-r----- 1 weblogic bea       8 Apr 21 17:24 EmbeddedLDAP.twpos
-rw-r----- 1 weblogic bea       8 Apr 21 17:24 EmbeddedLDAP.trpos
-rw-r----- 1 root     root      0 Apr 21 17:24 EmbeddedLDAP.tran
-rw-r----- 1 weblogic bea       0 Apr 21 19:26 EmbeddedLDAP.lok

從上面的信息可以看到EmbeddedLDAP.tran文件的權限是root用戶所有,這是因爲之前使用root用戶啓動過weblogic的原因,而現在是使用weblogic用戶來啓動weblogic

[root@localhost ldapfiles]# chown weblogic EmbeddedLDAP.tran
[root@localhost ldapfiles]# ls -lrt
total 164
-rw-r----- 1 weblogic bea     864 Dec 30 09:01 EmbeddedLDAP.index
-rw-r----- 1 weblogic bea     204 Dec 30 09:01 EmbeddedLDAP.delete
-rw-r----- 1 weblogic bea  146088 Apr 21 16:16 EmbeddedLDAP.data
-rw-r----- 1 weblogic bea       8 Apr 21 17:24 EmbeddedLDAP.twpos
-rw-r----- 1 weblogic bea       8 Apr 21 17:24 EmbeddedLDAP.trpos
-rw-r----- 1 weblogic root      0 Apr 21 17:24 EmbeddedLDAP.tran
-rw-r----- 1 weblogic bea       0 Apr 21 19:26 EmbeddedLDAP.lok
[root@localhost ldapfiles]# chown weblogic:bea EmbeddedLDAP.tran
[root@localhost ldapfiles]# ls -lrt
total 164
-rw-r----- 1 weblogic bea    864 Dec 30 09:01 EmbeddedLDAP.index
-rw-r----- 1 weblogic bea    204 Dec 30 09:01 EmbeddedLDAP.delete
-rw-r----- 1 weblogic bea 146088 Apr 21 16:16 EmbeddedLDAP.data
-rw-r----- 1 weblogic bea      8 Apr 21 17:24 EmbeddedLDAP.twpos
-rw-r----- 1 weblogic bea      8 Apr 21 17:24 EmbeddedLDAP.trpos
-rw-r----- 1 weblogic bea      0 Apr 21 17:24 EmbeddedLDAP.tran
-rw-r----- 1 weblogic bea      0 Apr 21 19:26 EmbeddedLDAP.lok

再次使用weblogic用戶來啓動weblogic

[weblogic@localhost bin]$ ./startWebLogic.sh
.
.
JAVA Memory arguments: -Xms1024m -Xmx2048m -XX:CompileThreshold=8000 -XX:PermSize=256m  -XX:MaxPermSize=512m
.
WLS Start Mode=Development
.
CLASSPATH=/home/weblogic/Oracle/Middleware/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/home/weblogic/Oracle/Middleware/patch_ocp371/profiles/default/sys_manifes
t_classpath/weblogic_patch.jar:/usr/java64/jdk1.6.0_45/lib/tools.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/weblogic_sp.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/
server/lib/weblogic.jar:/home/weblogic/Oracle/Middleware/modules/features/weblogic.server.modules_10.3.6.0.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/webservices.jar:/home
/weblogic/Oracle/Middleware/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/home/weblogic/Oracle/Middleware/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:/home/weblogic/Oracle/Mi
ddleware/wlserver_10.3/common/derby/lib/derbyclient.jar:/home/weblogic/Oracle/Middleware/wlserver_10.3/server/lib/xqrl.jar:.:/usr/java64/jdk1.6.0_45/lib:/usr/java64/jdk1.6.0_45/lib/dt.jar:/u
sr/java64/jdk1.6.0_45/lib/tools.jar
.
PATH=/home/weblogic/Oracle/Middleware/wlserver_10.3/server/bin:/home/weblogic/Oracle/Middleware/modules/org.apache.ant_1.7.1/bin:/usr/java64/jdk1.6.0_45/jre/bin:/usr/java64/jdk1.6.0_45/bin:/
usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java64/jdk1.6.0_45/bin:/home/weblogic/bin
.
***************************************************
*  To start WebLogic Server, use a username and   *
*  password assigned to an admin-level user.  For *
*  server administration, use the WebLogic Server *
*  console at http://hostname:port/console        *
***************************************************
starting weblogic with Java version:
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Starting WLS with line:
/usr/java64/jdk1.6.0_45/bin/java -client   -Xms1024m -Xmx2048m -XX:CompileThreshold=8000 -XX:PermSize=256m  -XX:MaxPermSize=512m -Dweblogic.Name=AdminServer -Djava.security.policy=/home/webl
ogic/Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy  -Xverify:none  -da -Dplatform.home=/home/weblogic/Oracle/Middleware/wlserver_10.3 -Dwls.home=/home/weblogic/Oracle/Middleware
/wlserver_10.3/server -Dweblogic.home=/home/weblogic/Oracle/Middleware/wlserver_10.3/server   -Dweblogic.management.discover=true  -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToCon
sole= -Dweblogic.ext.dirs=/home/weblogic/Oracle/Middleware/patch_wls1036/profiles/default/sysext_manifest_classpath:/home/weblogic/Oracle/Middleware/patch_ocp371/profiles/default/sysext_mani
fest_classpath  weblogic.Server

至此問題已經解決。

總結:出現不能鎖定AdminServer.lok文件的錯誤的原因是,因爲使用kill -9 殺掉了weblogic服務進程,或者使用不是安裝weblogic程序的用戶來啓動過weblogic所造成的。出現這種問題後,有三種解決方法:
1.是修改AdminServer.lok文件的權限,讓weblogic用戶能鎖定它.
2.刪除AdminServer.lok文件並重新使用weblogic用戶來啓動weblogic服務
3.殺死仍然運行的服務進程並重新weblogic服務.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章