Tomcat无响应问题定位流程

1、apache 死机,apache无法连接tomcat,查看apache的log,errorlog;

2、tomcat死机,tomcat的连接数不够可能,也可能tomcat的请求长时间无法返回,看tomcat的localhost.log,不是catalina.out。

3、如果资源文件很多,每个用户的请求会导致产生x100个的js和图片请求,也会消耗tomcat和apache的连接数,如果用户带宽慢也会导致连接数不够,最终导致用户无法访问(类似攻击就是这么做的,连了而不断开);

4、tomcat上的一个请求如果查询时间长,那么如果多个人都调用此连接,那么就会导致tomcat的连接数快速耗尽,一般主要的可能性是这个;

5、如果是上述问题,很容易从数据库的topsql里面去找到,运维需要经常检查数据库是否有长时间运行的sql,如果是前端请求对应的sql,则如果访问的人多了会迅速吊死整个系统,目前大部分情况都是这样的;

6、Oracle的log上面如果有大量的commit的错误,说明写操作多,数据库io跟不上,如果没有则说明只有读操作,读的操作oracle不会打log,但是如果客户端死掉了,则oracle会报错说客户度无响应,报错在TNS连接上面。

7、如果有大量的插入和update,delete等操作,需要考虑数据量,比如插入100万条,那肯定不能每条commit,而是应该批量插入和commit,对于update和delete如果where限制条件宽,那么会导致大量的rollbock,undo等操作,io会很慢,并且会导致表被锁死,期间其他的操作都会吊住,这是非常危险的操作,需要进行分批的操作(通过where条件来分批);这些通过em检查会很容易找到问题;

8、Oracle的新建连接时间很长,或者无法建立连接:这个在服务器端的log上显示出tns错误,如果发生这个情况,要验证是否dns有问题,是否更换dns可以加快连接速度,如果有关系就证明是dns问题。

9、要每天检查oracle的alert.log和tnslisenter的tracelog;

10、安装并且使用oracle的dbconsole,每天看性能和顶级消耗,里面很容易找到sql相关的问题,包括select和commit问题;

 

总结

1、需要每天查看apache的errrorlog,tomcat的localhost log,oracle的alert.log和listener的tracelog,每天查看oracle的dbconsole;

2、需要调整tomcat的连接数,最好不要用tomcat,而使用glassfish,需要观察oracle的连接数使用情况(一般oracle的连接数300,是否耗尽)

通过操作系统的netstat检查数据库连接数,也可以检查apache和tomcat的连接,也可以检查apache和用户的连接数;

你可能感兴趣的:(Java,Tomcat)