今天早上网站挂掉,杀掉后重启jboss卡在resource:jboss-log4j.xml,
上网搜索E文网站找到个类似的hang在resource:jboss-log4j.xml处但是没有给解决方案
但自用jobss是GA而不是EAP版本,所以根本搜到的内容无关。
找半天回头看日志发现jboss后等了很久终于报sql连接错误,这时候去看数据库才发现问题。
那么到底是为什么jboss会hang在resource:jboss-log4j.xml处N久以后才打印错误呢
简单来说,走到resource:jboss-log4j.xml以后jboss就本身已经启动,后面就是启动应用了,卡在这里就是启应用的时候阻塞了。
在正常情况下如果应用的数据库连接有问题,jboss会立刻报sql连接错误,但是今天出了特殊情况。
登陆数据库服务器发现,rac集群的一台机器集群已经停了(原因是hba卡连接断开了),而正在运行的那台机器其他服务都正常,srvctrl status nodeapps -n node1发现只有lsn 是not runing状态,但是netstat发现1521端口正在监听,监听进程也还在运行,srvctrl stop nodeapps报错,srvctrl stop listener也报错
srvctrl停不掉nodeapps,没办法直接停了database和asm以后关闭crs服务(关闭crs服务的时候提示还有服务在运行),停完crs服务后ps -u oracle发现监听的进程还在,kill -9杀掉在吧crs起来后监听终于running
这时候jboss就能正常启动了,原因也真相大白了——jboss连接数据库端口没有失败,所以没有立刻返回错误,但是数据库的监听程序已经出错了所以一直没返回数据,导致jboss一直阻塞在那里等待数据直到超时才报错。如果数据库本身有问题监听未运行的情况下,jboss尝试连接几次后就报错了也就不会出现这种hang住半天不报错的情况了
顺便说下上面rac那里的处理方法太蠢了,啥也不用停直接kill -9掉监听程序在用srvctrl start listener起监听就是。
阅读(2940) | 评论(0) | 转发(0) |