HP-UX下OC4J的故障处理二例
我们这个平台使用的是HP的小机rx6600,因为跑java程序,所以选用了oracle公司的oc4j这个中间件,顺便吐槽一下,这个oc4j真的太麻烦,太讨厌了,搞不懂公司当初在实施的时候,为什么不采用weblogic或者是websphere这类的中间件。
前几天因为服务器双机出现故障,硬件厂家来了工程师处理好了双机问题。我这边因为修正了一个接口地址,本想重启应用,可应用死活启动不了。
故障一:
故障现象:
看control.sh.log
内容,报如下错误:
1
2
3
4
opmnctl: starting opmn and all managed processes...
RCV: Permission denied
Communication error with the OPMN server local port.
Check the OPMN log files
之后打开opmn.log
,查看日志内容,发现如下错误:
1
2
3
4
5
6
7
8
9
12/11/16 19:22:14 [ons-internal] ONS server initiated
12/11/16 19:22:14 [pm-internal] PM state directory exists: /oracle/oracle10g/product/10.1.3.1/OracleAS_1/opmn/logs/states
12/11/16 19:22:14 [pm-internal] OPMN server ready. Request handling enabled.
12/11/16 19:22:14 [ons-listener] 127.0.0.1,6100: BIND (Address already in use)
12/11/16 19:22:14 [ons-connect] Local connection 127.0.0.1,6100 invalid form factor<unknown>
从日志可以看出,ons监听器无法绑定地址到本地的6100端口,经过查询OTN,发现应该是opmn进程没有退出,导致ons监听器启动不了。
解决办法:
1.在双机未启动的情况下,查看opmn进程是否存在:
ps -ef|grep 'opmn -d'|grep -v 'grep'
2.若存在进程,注意一下进程的所属用户,并且使用kill -9杀掉这个进程:
kill -9 <PID>
3.查看.formfactor的权限和属主,若不正确使用相应的命令处理:
$ cd $ORACLE_HOME/opmn/conf
1
2
3
4
5
$ ls -ld1 .*
drwx------ 3 oracle oinstall 4096 Sep 7 09:08 .
drwx------ 8 oracle oinstall 4096 May 30 09:00 ..
-r-------- 1 root root 21 Sep 7 09:08 .formfactor
$ chown oracle:oinstall .formfactor
4.启动双机,检查应用是否启动。
PS:出现这种故障的情况,是因为opmn进程可能以其他用户启动的,而正确的属主用户无法停止,如本例中是oracle用户。还有就是.formfactor的权限问题,也要注意。
故障二:
故障现象:
在control.sh.log中,看到如下错误:
1
2
3
4
5
6
7
8
9
Error
-->Process (index=1,uid=528,pid=3990)
failed to start a managed process after the maximum retry limit
Log:
/oracle/oracle10g/product/10.1.3.1/OracleAS_1/opmn/logs//HTTP_Server~1.log
logout
ERROR: Function customer_defined_run_cmds
ERROR: Failed to RUN customer commands
查看opmn.log,发现如下问题:
1
2
3
4
gstas.gstasap1~default_group~home~default_group~527:3797
Status: Stop
Operation: request (time out while waiting for a managed process to stop)
ErrFile: /oracle/oracle10g/product/10.1.3.1/OracleAS_1/opmn/logs//default_group~home~default_group~1.log
之后查看HTTP_Server~1.log,发现非常多的startssl信息:
1
2
3
4
5
6
7
8
9
--------
12/11/20 20:50:22 Start process
--------
/oracle/oracle10g/product/10.1.3.1/OracleAS_1/Apache/Apache/bin/apachectl startssl: execing httpd
--------
12/11/20 20:50:32 Start process
--------
/oracle/oracle10g/product/10.1.3.1/OracleAS_1/Apache/Apache/bin/apachectl startssl: execing httpd
解决方案:
起初我以为是oc4j中的apache配置文件出现了问题,于是在opmn.xml中禁用了SSL,但是故障现象依旧出现,我将修改过的opmn.xml还原回去,然后继续查,发现httpd.pid文件的属主不正确,竟然属于root用户,这明显有问题,应该是属于oracle用户的,于是我找到这个httpd.pid文件,将其mv至其他目录,重启应用,yeah,应用正常启动了。
总结:
在生产环境中,出现应用启动失败的情况,一点都不可怕,而且也请不要慌张,所有错误都是有迹可循的,仔细查看日志,分析错误原因,就能找到正确的解决办法,当然,找到问题却解决不了的时候,也还是可以google的。呵呵。
oc4j的几个重要日志一定要注意:
1.opmn的日志:
/oracle/oracle10g/product/10.1.3.1/OracleAS_1/opmn/logs/opmn.log
2.apache的日志:
/oracle/oracle10g/product/10.1.3.1/OracleAS_1/Apache/Apache/logs
3.双机cmcluster的控制脚本的日志:
/etc/cmcluster/app_pkg[应用名]/control.sh.log
4.你的java应用的日志.