tomcat8.0的内存优化配置及垃圾回收管理_tomcat 垃圾回收配置-程序员宅基地

技术标签: tomcat  服务器  

一、Tomcat并发优化;

tomcat并发量与其配置息息相关,一般的机器几百的并发量足矣,如果设置太高可能引发各种问题,内存、网络等问题也能在高并发下暴露出来,因此,配置参数的设置非常重要。

(1) tomcat并发参数

maxThreads:最大的并发请求数,当cpu利用率高的时候,不宜增加线程的个数,当cpu利用率不高,大部分是io阻塞类的操作时,可以适当增加该值。
maxSpareThreads:Tomcat连接器的最大空闲 socket 线程数
acceptCount:当处理任务的线程数达到最大时,接受排队的请求个数
connectionTimeout:网络连接超时,单位毫秒
enableLookups:若为false则不进行DNS查询,提高业务能力应设置为false
disableUploadTimeout:若为true则禁用上传超时

以上是一些比较常用的参数,Tomcat中server.xml配置详解 会有更加详细的介绍。

(2) tomcat并发配置

在conf下的server.xml文件中节点进行配置

二、Tomcat内存配置

tomcat一般都有默认的内存大小,其默认值对整个物理内存来说非常小,如果不配置tomcat的内存,会大大浪费服务器的资源,验证影响系统的性能,所以对tomcat的内存配置对用户量比较大的系统尤为重要。

(1) tomcat内存参数

	-server:一定要作为第一个参数,在多个CPU时性能佳
  -Xms:java Heap初始大小。 默认是物理内存的1/64。
  -Xmx:java heap最大值。建议均设为物理内存的一半。不可超过物理内存。
  -XX:PermSize:设定内存的永久保存区初始大小。缺省值为64M。
  -XX:MaxPermSize:设定内存的永久保存区最大 大小。缺省值为64M。
  -Xmn:young generation(年轻代)的heap大小。一般设置为Xmx34分之一

(2) tomcat内存配置

在bin下的catalina.bat文件中echo Using CATALINA_BASE: "%CATALINA_BASE%"的前一行加入如下代码。

set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx8192m -Xmn1890m

三、Tomcat垃圾回收

垃圾回收(gc)机制非常重要,有时系统会因为内存没有及时回收导致内存溢出,或是内存饱和出现无法响应用户请求的情况,这就要要求我们对空闲内存进行清理,以确保系统正常运行,tomcat GC的最佳配置是确保系统正常运行的关键。

(1) JVM中对象的划分及管理

JVM根据运行于其中的对象的生存时间大致的分为3种。并且将这3种不同的对象分别存放在JVM从系统分配到的不同的内存空间。这种对象存放空间的管理方式叫做Generation管理方式。
  Young Generation(年轻代):用于存放“早逝”对象(即瞬时对象)。例如:在创建对象时或者调用方法时使用的临时对象或局部变量。
  Tenured Generation(年老代):用于存放“驻留”对象(即较长时间被引用的对象)。往往体现为一个大型程序中的全局对象或长时间被使用的对象。
  Perm Generation(永久保存区域):用于存放“永久”对象。这些对象管理着运行于JVM中的类和方法。

(2) jvm垃圾搜集参数

-verbose:gc:显示垃圾收集信息(在虚拟机发生内存回收时在输出设备显示信息)
  UseConcMarkSweepGC:开启此参数使用ParNew & CMS(serial old为替补)搜集器
  MaxTenuringThreshold:晋升老年代的最大年龄。默认为15,比如设为10,则对象在10次普通GC后将会被放入年老代。
  -XX:+ExplicitGCInvokesConcurrent:System.gc()可以与应用程序并发执行。
  GCTimeRatio:设置系统的吞吐量。比如设为99,则GC时间比为1/1+99=1%,也就是要求吞吐量为99%。若无法满足会缩小新生代大小。
  CMSInitiatingOccupancyFraction:触发CMS收集器的内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集。
  CMSFullGCsBeforeCompaction:设置在几次CMS垃圾收集后,触发一次内存整理。
  -Xnoclassgc:禁用类垃圾回收,性能会高一点;
  -XX:SoftRefLRUPolicyMSPerMB=N:官方解释是:Soft reference在虚拟机中比在客户集中存活的更长一些。其清除频率可以用命令行参数 -XX:SoftRefLRUPolicyMSPerMB=来控制,这可以指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收之后)存活1秒钟。注意,这是一个近似的值,因为 soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。系统默认为一秒。

以上是一些基本的参数配置,通过JVM内存管理——垃圾搜集器参数精解查看更详细的配置,通过Tomcat中Java垃圾收集调优查看原理

(3) tomcat垃圾搜集配置

tomcat的垃圾搜集是和内存设置一起配置的,内存和gc的设置也不是越大越好,良好的比例可以使你的系统性能提升一般甚至更多,下面是tomcat7 ,服务器物理内存16g的标准配置

在bin下的catalina.bat文件中echo Using CATALINA_BASE: "%CATALINA_BASE%"的前一行加入如下代码。

set JAVA_OPTS=%JAVA_OPTS% 
  -server -Xms8192m -Xmx8192m -Xmn1890m -verbose:gc 
  -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=5 -XX:+ExplicitGCInvokesConcurrent -XX:GCTimeRatio=19 -XX:CMSInitiatingOccupancyFraction=70 -XX:CMSFullGCsBeforeCompaction=0 -Xnoclassgc -XX:SoftRefLRUPolicyMSPerMB=0

配置后系统的jvm内存运行状况如下:
在这里插入图片描述
可以看到系统在内存到达2g后就会回收空闲内存,基本不会发生溢出的情况,8g的最大内存最高才用了2g,说明系统的性能还是很优越的,用户数再增加也能在一定程度上保证系统稳定性。

四、Tomcat宕机预防

(1) TCP端口状态

  1. LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态。
  2. ESTABLISHED状态 ESTABLISHED的意思是建立连接。表示两台机器正在通信。
  3. CLOSE_WAIT状态 对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭。
  4. TIME_WAIT状态 我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
  5. 更详细的TCP端口状态请参考TCP端口状态说明

(2) Windows系统下的TCP参数

  1. KeepAliveTime KeepAliveTime的值控制系统尝试验证空闲连接是否仍然完好的频率。如果该连接在一段时间内没有活动,那么系统会发送保持连接的信号,如果网络正常并且接收方是活动的,它就会响应。如果需要对丢失接收方的情况敏感,也就是说需要更快地发现是否丢失了接收方,请考虑减小该值。而如果长期不活动的空闲连接的出现次数较多,但丢失接收方的情况出现较少,那么可能需要增大该值以减少开销。 缺省情况下,如果空闲连接在7200000毫秒(2小时)内没有活动,系统就会发送保持连接的消息。
  2. KeepAliveInterval KeepAliveInterval的值表示未收到另一方对“保持连接”信号的响应时,系统重复发送“保持连接”信号的频率。在无任何响应的情况下,连续发送“保持连接”信号的次数超过TcpMaxDataRetransmissions(下文将介绍)的值时,将放弃该连接。如果网络环境较差,允许较长的响应时间,则考虑增大该值以减少开销;如果需要尽快验证是否已丢失接收方,则考虑减小该值或TcpMaxDataRetransmissions值。 缺省情况下,在未收到响应而重新发送“保持连接”的信号之前,系统会等待1000毫秒(1秒)。
  3. KeepAliveInterval KeepAliveInterval的值表示未收到另一方对“保持连接”信号的响应时,系统重复发送“保持连接”信号的频率。在无任何响应的情况下,连续发送“保持连接”信号的次数超过TcpMaxDataRetransmissions(下文将介绍)的值时,将放弃该连接。如果网络环境较差,允许较长的响应时间,则考虑增大该值以减少开销;如果需要尽快验证是否已丢失接收方,则考虑减小该值或TcpMaxDataRetransmissions值。 缺省情况下,在未收到响应而重新发送“保持连接”的信号之前,系统会等待1000毫秒(1秒)。
  4. 更多系统参数请参考Windows系统下的TCP参数

(3) tomcat假死分析及预防

close_wait发生的原因是TCP连接没有调用关闭方法,需要应用来处理网络链接关闭,对于Web请求出现这个原因,经常是因为Response的BodyStream没有调用Close,除了调整代码外,可以调整windows系统参数解决tomcat假死问题 tomcat假死时利用netstat -ano查看端口现象如下:

在这里插入图片描述
KeepLive在Windows操作系统下默认是7200000毫秒,也就是2个小时才清理一次,对与大量close_wait情况下,可以减小其时间
在注册表的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]改动或创建以下项
“KeepAliveTime”=dword:afc8 (45000毫秒)
“KeepAliveInterval”=dword:1
“TcpMaxDataRetransmissions”=dword:”5″
情况会明显改善,但不保证大并发下服务器不会出现假死现象,毕竟代码的规范性也占很大比重。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yangyang_VV/article/details/124631373

智能推荐

hdu 1229 还是A+B(水)-程序员宅基地

文章浏览阅读122次。还是A+BTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24568Accepted Submission(s): 11729Problem Description读入两个小于10000的正整数A和B,计算A+B。...

http客户端Feign——日志配置_feign 日志设置-程序员宅基地

文章浏览阅读419次。HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。NONE:不记录任何日志信息,这是默认值。配置Feign日志有两种方式;方式二:java代码实现。注解中声明则代表某服务。方式一:配置文件方式。_feign 日志设置

[转载]将容器管理的持久性 Bean 用于面向服务的体系结构-程序员宅基地

文章浏览阅读155次。将容器管理的持久性 Bean 用于面向服务的体系结构本文将介绍如何使用 IBM WebSphere Process Server 对容器管理的持久性 (CMP) Bean的连接和持久性逻辑加以控制,使其可以存储在非关系数据库..._javax.ejb.objectnotfoundexception: no such entity!

基础java练习题(递归)_java 递归例题-程序员宅基地

文章浏览阅读1.5k次。基础java练习题一、递归实现跳台阶从第一级跳到第n级,有多少种跳法一次可跳一级,也可跳两级。还能跳三级import java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[]args){ Scanner reader=new Scanner(System.in); while(reader.hasNext()){ _java 递归例题

面向对象程序设计(荣誉)实验一 String_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏6次。目录1.串应用- 计算一个串的最长的真前后缀题目描述输入输出样例输入样例输出题解2.字符串替换(string)题目描述输入输出样例输入样例输出题解3.可重叠子串 (Ver. I)题目描述输入输出样例输入样例输出题解4.字符串操作(string)题目描述输入输出样例输入样例输出题解1.串应用- 计算一个串的最长的真前后缀题目描述给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。

算法设计与问题求解/西安交通大学本科课程MOOC/C_算法设计与问题求解西安交通大学-程序员宅基地

文章浏览阅读68次。西安交通大学/算法设计与问题求解/树与二叉树/MOOC_算法设计与问题求解西安交通大学

随便推点

[Vue warn]: Computed property “totalPrice“ was assigned to but it has no setter._computed property "totalprice" was assigned to but-程序员宅基地

文章浏览阅读1.6k次。问题:在Vue项目中出现如下错误提示:[Vue warn]: Computed property "totalPrice" was assigned to but it has no setter. (found in <Anonymous>)代码:<input v-model="totalPrice"/>原因:v-model命令,因Vue 的双向数据绑定原理 , 会自动操作 totalPrice, 对其进行set 操作而 totalPrice 作为计..._computed property "totalprice" was assigned to but it has no setter.

basic1003-我要通过!13行搞定:也许是全网最奇葩解法_basic 1003 case 1-程序员宅基地

文章浏览阅读60次。十分暴力而简洁的解决方式:读取P和T的位置并自动生成唯一正确答案,将题给测点与之对比,不一样就给我爬!_basic 1003 case 1

服务器浏览war文件,详解将Web项目War包部署到Tomcat服务器基本步骤-程序员宅基地

文章浏览阅读422次。原标题:详解将Web项目War包部署到Tomcat服务器基本步骤详解将Web项目War包部署到Tomcat服务器基本步骤1 War包War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。当开发人员在自己的开发机器上调试所有代码并通过后,为了交给测试人员测试和未来进行产品发布,都需要将开发人员的源码打包成Wa..._/opt/bosssoft/war/medical-web.war/web-inf/web.xml of module medical-web.war.

python组成三位无重复数字_python组合无重复三位数的实例-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏13次。# -*- coding: utf-8 -*-# 简述:这里有四个数字,分别是:1、2、3、4#提问:能组成多少个互不相同且无重复数字的三位数?各是多少?def f(n):list=[]count=0for i in range(1,n+1):for j in range(1, n+1):for k in range(1, n+1):if i!=j and j!=k and i!=k:list.a..._python求从0到9任意组合成三位数数字不能重复并输出

ElementUl中的el-table怎样吧0和1改变为男和女_elementui table 性别-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏2次。<el-table-column prop="studentSex" label="性别" :formatter="sex"></el-table-column>然后就在vue的methods中写方法就OK了methods: { sex(row,index){ if(row.studentSex == 1){ return '男'; }else{ return '女'; }..._elementui table 性别

java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下-程序员宅基地

文章浏览阅读1.1k次。java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下

推荐文章

热门文章

相关标签