网站首页 > 精选文章 / 正文
前言:
昨晚,正在现网运行的项目接口突然出现全阻问题。客户端发送过来的请求,我们作为服务端没有响应。经过一系列的tomcat优化和dump文件分析。最终解决问题。下面式分析的过程。
分析过程
首先登录linux服务器上查看ps -ef | grep tomcat查询服务运行正常。但是通过netstat命令
netstat -an | grep 8080查询端口状态是SYNC_RECV。接口请求没有响应,没有相关的日志打印。
SYNC_RECV状态首先是tcp建立连接三次握手的过程的第二次握手。
第二次握手(SYN + ACK):服务器收到客户端的 SYN 请求后,会发送一个带有 SYN 和 ACK(确认)标志的包作为响应。服务器通过 SYN 标志表示接受客户端的连接请求,通过 ACK 标志表示确认客户端的 SYN 请求有效。此时,服务器进入 SYN_RECEIVED(同步已接收)状态。
也就是说tcp连接未建立成功。
tomcat连接数过多
首先排查了tomcat的相关配置和分析日志信息。server.xml的配置信息中未配置线程最大连接数的,也就是说tomcat6默认的最大连接数是200,也就是说超过200之后,如果连接未释放会“卡住”。还存在缓存未清理的问题。进行下面的操作。
原配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
给出的优化配置:
<Connector port="80" protocol="HTTP/1.1"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
connectionTimeout="20000"
redirectPort="8443" />
当在对其进行并发测试时,基本对个并发上去就宕机了,还要修改默认连接数设置:以下红色四行TOMCAT6中好相没有,手工加上就可以了,基本上可以解决连接数过大引起的死机。其中具体的说明是:
maxThreads="600" ///最大线程数
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要
的socket线程。
acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
Tomcat的JVM提示内存溢出
查看%TOMCAT_HOME%\logs文件夹下,日志文件是否有内存溢出错误
错误提示:java.lang.OutOfMemoryError: Java heap space
Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的使用内存即可解决此问题。
Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m
Linux环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:JAVA_OPTS=’-Xms256m -Xmx512m’
其中,-Xms设置初始化内存大小,-Xmx设置可以使用的最大内存。
错误提示:java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:
在catalina.bat的第一行增加:
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -
XX:MaxPermSize=256m
在catalina.sh的第一行增加:
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -
XX:MaxPermSize=256m
tomcat配置添加日志打印
在server.xml中配置日志添加的打印
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="access_log" suffix=".txt"
pattern="common" resolveHosts="false" />
通过这样的配置,当有请求到达 Tomcat 服务器时,AccessLogValve阀门将把请求的访问信息记录到指定的访问日志文件中。日志文件的命名格式为 access_log<日期>.txt,例如 access_log20220225.txt。
Tomcat连接数设置
在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
tomcat清楚缓存
清理/home/lcdacs/DACSINTF/tomcat/conf下的Catalina目录;命令cd /home/lcdacs/DACSINTF/tomcat/conf;rm -rf Catalina;
- 清缓存:cd /home/lcdacs/DACSINTF/tomcat/work;rm -rf Catalina;
- /home/lcdacs/DACSINTF/tomcat/temp目录存在文件进行清理。
- 目录:/home/lcdacs/DACSINTF/tomcat/webapps下保持空。
总结
以上是对tomcat相关配置的优化方案。旨在解决tomcat相关的配置问题。希望对大家有帮助。
Tags:tomcat jvm参数设置
猜你喜欢
- 2024-12-14 服务端优化-Tomcat调优
- 2024-12-14 阿里面试:来聊聊JVM性能调优?
- 2024-12-14 探索Tomcat服务器性能优化之道
- 2024-12-14 Tomcat9.0官方手册中文版(一):入门介绍
- 2024-12-14 互联网Web服务容器:Tomcat8解析及性能优化
- 2024-12-14 java发起POST方法请求第三方接口(编码处理)
- 2024-12-14 扩大Tomcat内存方法
- 2024-12-14 线上问题排查指引
- 2024-12-14 spring boot使用经验分享(一)tomcat参数配置
- 2024-12-14 Tomcat性能优化(一)