项目在tomcat里运行一段时间老是自动崩掉的问题排查与解决

最近的检验系统上线一段时间后,发现系统访问不了,tomcat老是会自动崩掉,通常遇到这种问题,程序员的第一反应都确定是内存溢出。html

确实是,可是java里内存分好几种,堆内存、栈内存、静态内存区等等,下面记录下个人排查问题步骤,以及解决方法。java

1、查看服务器内存使用状况。

看看tomcat崩溃的时候,tomcat进程使用内存是否明显占用较多。程序员

2、查看tomcat日志

catalina.201X-XX-XX.log

这个日志记录tomcat每次启动的状况。web

localhost.201X-XX-XX.log

这个日志记录tomcat里各个webapp运行状况的日志。tomcat

localhost_access_log.201X-XX-XX.txt

这个日志记录每次url访问的状况。服务器

看日志能够明白,是报java.lang.StackOverflowError错误了,这个是栈内存溢出,而后还能够看到是在testServlet里的75行出错了。并发

这一行是啥呢?app

out.println(sss.toString());

sss是一个相对很大的方法内的局部变量,一两次访问这个url可能不会有啥大的感受,最多稍微慢点,可是并发访问多一点,内存溢出就不可避免了。eclipse

3、解决方法

1.增大tomcat的栈内存。

具体看这个:Tomcat配置与优化(内存、并发、管理)与性能监控webapp

2.改代码,避免太大的局部变量。

4、之后如何监控tomcat运行状况

使用jdk自带的JvisualVM工具,这个工具很好用,能监控各类java进程的状况,tomcat、eclipse等等,不光能监控本机的,并且还能监控远程的服务器。