tomcat部署在linux服务器,过一段时间就访问不了web界面,提示连接被重置

tomcat服务单独部署在一台服务器上,大概400人在使用,过一段时间就访问不到web界面,浏览器界面提示连接被重置,但是tomcat日志也没有报错还在正常运行, netstat -anop|grep 11000 查看连接有40多个SYN_RECV状态的连接, 我怀疑是tcp连接的问题导致连接不上,但是不能复现

你好,像你这种情况呢,我理解是你的tomcat是部署在linux上的一个节点。对外提供了外网访问,是么。如果是这样子的话,400个人访问,可能就会出现由于并发导致不能及时得到响应。表现上页面可能打不开、白页等待。如果调出f12的话,你看看是否存在pending的资源加载情况。 服务端器端日志不报错,说明不是业务报错问题,应该是性能上的问题。 tcp大量处于建立连接状态,占用了大量的io资源。 我建议你从两方面查一下: 主机侧查下 连接数设置,优化下linux内核关于tcp连接方面的参数;应用侧查下是否存在gc等情况,另外tomcat线程数做下调整。一般单节点好像也就400个并发线程。 请求多了,会出现阻塞等待。

1、查看tomcat服务应用日志路径下*/logs/catalina.out的日志输出
tail -100 calalina.out
看到如下报错:
2018/04/06-19:24:16 >> ERROR >> catalina-exec-3981 >> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1515) >>
java.lang.OutOfMemoryError: PermGen space
2018/04/06-19:26:03 >> INFO >> catalina-exec-3982 >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:203) >> 19:26:03.114 [catalina-exec-3982] INFO monitoring - remoteAddr = 130.81.10.3, request = / GET: 2918 ms, erreur, 0 Ko
2018/04/06-19:26:03 >> ERROR >> catalina-exec-3982 >> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1515) >>
java.lang.OutOfMemoryError: PermGen space
可以断定是内存溢出。
2、查看linux系统对应用的进行限制数
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 212992
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
进程的open files 最大为1024个文件,默认
3、使用root用户查看linux系统 当前进程打开了多少个文件句柄
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
4192 67896
打开文件4192,进程67896
查看进程
ps -ef |grep 67896
webuser 67896 1 52 Apr03 ? 3-14:02:26 /usr/java/jdk1.7.0_79/bin/java -Dnop -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -javaagent:/appdynamics/AppServerAgent/javaagent.jar -Djava.endorsed.dirs=/tomcat-8.0.30/endorsed -classpath /tomcat-8.0.30/bin/bootstrap.jar:/tomcat-8.0.30/bin/tomcat-juli.jar -Dcatalina.base=/tomcat-8.0.30 -Dcatalina.home=/tomcat-8.0.30 -Djava.io.tmpdir=*/tomcat-8.0.30/temp org.apache.catalina.startup.Bootstrap start
找到指定进程java打开文件数4192,远超过1024,溢出。
将内存由2C/12G 扩成 4C/12G
将tomcat/bin/calalina.sh配置
调整为JAVA_OPTS="-Xms2048m -Xmx4096m -XX:PermSize=512m -XX:MaxPermSize=1024m"
然后重启观察

1.路由追踪(tracert),发现能够到达服务器,基本排除了线路的问题。

2.检查80端口(tracetcp),本地端口连通性测试,测试结果也没有问题(附:tracetcp使用方法https://help.aliyun.com/knowledge_detail/40572.html)。

3.检查防火墙,之前,我将防火墙的CC防护模式更改为“紧急”,难道是“紧急”模式对网站造成了误杀,于是我将防火墙防护模式改为“正常”,再次访问网站,发现大部分页面基本不再出现“连接被重置”现象,但是在某些特定的页面(表单提交)还是会出现连接被重置的现象啊,查询资料,发现是client_max_body_size这个参数的问题,在nginx的配置文件中(nginx.conf),添加这个参数:client_max_body_size  30M,重新访问,问题解决。

4.网上查询资料说如果使用了代理服务器,出现类似的问题,在配置文件引入下面的代码可解决(注:未亲自验证)。

proxy_set_header      Host            $host;
proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;

1、查看tomcat服务应用日志路径下*/logs/catalina.out的日志输出
tail -100 calalina.out
看到如下报错:
2018/04/06-19:24:16 >> ERROR >> catalina-exec-3981 >> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1515) >>
java.lang.OutOfMemoryError: PermGen space
2018/04/06-19:26:03 >> INFO >> catalina-exec-3982 >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:203) >> 19:26:03.114 [catalina-exec-3982] INFO monitoring - remoteAddr = 130.81.10.3, request = / GET: 2918 ms, erreur, 0 Ko
2018/04/06-19:26:03 >> ERROR >> catalina-exec-3982 >> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1515) >>
java.lang.OutOfMemoryError: PermGen space
可以断定是内存溢出。
2、查看linux系统对应用的进行限制数
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 212992
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
进程的open files 最大为1024个文件,默认
3、使用root用户查看linux系统 当前进程打开了多少个文件句柄
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
4192 67896
打开文件4192,进程67896
查看进程
ps -ef |grep 67896
webuser 67896 1 52 Apr03 ? 3-14:02:26 /usr/java/jdk1.7.0_79/bin/java -Dnop -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -javaagent:/appdynamics/AppServerAgent/javaagent.jar -Djava.endorsed.dirs=/tomcat-8.0.30/endorsed -classpath /tomcat-8.0.30/bin/bootstrap.jar:/tomcat-8.0.30/bin/tomcat-juli.jar -Dcatalina.base=/tomcat-8.0.30 -Dcatalina.home=/tomcat-8.0.30 -Djava.io.tmpdir=*/tomcat-8.0.30/temp org.apache.catalina.startup.Bootstrap start
找到指定进程java打开文件数4192,远超过1024,溢出。
将内存由2C/12G 扩成 4C/12G
将tomcat/bin/calalina.sh配置
调整为JAVA_OPTS="-Xms2048m -Xmx4096m -XX:PermSize=512m -XX:MaxPermSize=1024m"
然后重启观察
————————————————
版权声明:本文为CSDN博主「卡农2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012034742/article/details/79908967