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\
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服务.