一次定位“应用无法访问”的过程总结
最近在预研产品的虚拟化部署,装了几次应用。今天装完以后发现无法访问,就定位了一下。虽然不复杂,还是记录一下:
jboss的版本是4.2.3,很老的版本,日志和目录结构不是很熟
1. 访问http://ip.193:port/xxx,失败,显示的是jboss没有启动的样子,而不是404,500什么的
2. 查看jboss/bin/nohup.out,看到有如下异常:
Caused by: java.rmi.UnknownHostException: Unknown host: xxx.site; nested exception is:
java.net.UnknownHostException: xxx.site
想到是hostname配置的问题,修改/etc/hosts
以上解决了jboss启动过程中,由于某个listener抛出异常,导致jboss未正常启动的问题
3. 再次访问http://ip.193:port/xxx,还是失败,仍然显示JBOSS未启动
4. 再次查看jboss/bin/nohup.out,看出JBOSS已经正常启动
5. 于是尝试访问http://ip.193:port/,不加应用路径,看到了jboss的首页,证实jboss已经启动
6. 打开fiddler2,尝试抓包,发现当访问http://ip.193:port/xxx时,会跳转到代理服务器http://ip.194:port/
7. 但是我没有安装代理服务器,所以在194:port端口上,没有应用响应HTTP请求,故失败
8. 在194上安装代理服务器,问题解决
jboss相关日志:
/opt/company/log,这是应用写的日志
/opt/company/product/jboss/server/default/log,这是jboss写的日志
/opt/company/product/jboss/bin/nohup.out,这是jboss的启动日志
为什么会直接跳转:
web app的web.xml中设置了一个/*的filter,其实是CAS的SSO filter,将所有的http request跳转到194上。所以加上应用路径就会触发跳转,造成失败;只用ip+port访问,可以看到jboss已经启动了
总结:
1、web容器本身的日志对于问题定位很重要,光靠应用本身的日志,有时候会遗漏重要信息,越烂的应用越是如此
2、判断jboss是否正常启动,可以用不加应用路径的方式,看看是否能访问到jboss的首页;也可以看jboss/bin/nohup.out文件
3、定位奇怪的web app问题时,抓包工具很好用。http watcher和fiddler2都不错