1、Tomcat conf中server.xml有个重要的性能配置,根据机器的硬件性能合理的配置常驻线程数以及最大线程数,还有等待队列线程数:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="120000"
redirectPort="8443"
maxThreads="600"
minSpareThreads="250"
maxSpareThreads="250"
acceptCount="400"
uRIEncoding="utf-8"/>
关于maxThreads、acceptCount的意义请参见
http://www.cnblogs.com/baibaluo/archive/2011/08/23/2150305.html
这里只大概叙述如下:
这两个值如何起作用,请看下面三种情况
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。
这里以业务服务器为例,机器硬件好一点的话,4核2.5G的,maxThreads开到600-1000,是比较理想的。
如果想继续提高服务器的并发数,将acceptCount也设置为和maxThreads一样大。但是也需要合理的考虑单次的请求响应处理时间,一味的增加acceptCount只是避免了过多的超时拒绝,但是对于用户体验还是最好5秒之内一次响应能够处理完,这个时候增加后端的并行的Tomcat服务器将是明智的选择。
该图的就是在配置如下参数时,Tomcat线程池统计信息,在常态下维持250个线程,当应对高并发的情况下,系统不断地创建线程直到maxThreads设置的最大值为止。
maxThreads="600"
minSpareThreads="250"
maxSpareThreads="250"
acceptCount="400"
2、JVM虚拟机的启动配置 bin/catalina.sh
设定虚拟机的server启动方式,以及堆内存的初始分配大小,垃圾收集机制,线程最大堆栈配置数,新生代内存大小等等
a 、JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-Server模式还是-client模式,JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本);
b、线程堆栈 -Xss 1024K 可以根据业务服务器的每次请求的大小来进行分配;
c、-xms -xmx 是 jvm占用最小和最大物理内存配置参数,一般讲两者配置一样大,这样就免去了内存不够用时申请内存的耗时;
d、-XX:PermSize=128M -XX:MaxPermSize=128m
从前人的各类文章上了解到jvm的垃圾回收机制,这里只是简单提一下, jvm的内存分为2大类型,一个是perm型,另一个是generation型。perm区域存放的是class这些静态信息,一般默认64m,如果你的项目很大,有可能一启动就报错,out of memory permsize什么的,另外如果用spring框架的话很多类是动态反射加载的,运行一段时间有可能出现此异常,这种情况,设置下permsize就可以了。
另外一个类型才是重点,应用的代码基本上在这个区域活动,new的类都会在这个区域,而且jvm决大部分工作都在这里搞了,这个区详细说很复杂,有空去看sun资料,这里也只大概提下:这个区包含新生代和老生代区域,所有new出来的会放置在新区域,而多次回收失败的一些一直被使用的实例则被转移到老生代区域,所以新生代区域活动是最频繁的。新生代内存不足时会促发一次 这个区的gc ----然后再到老生代的gc---最后才轮到full gc。full gc代价很高,应该尽量避免,尽量在newsize参数的这个区gc,一般配置 newsize分配到总内存1/4左右,---最终,如果full gc 还是内存不足,那就会引发out of memory 常见的那种。
-----------摘自jvm 参数优化---笔记
e、-XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseAdaptiveSizePolicy
这几个参数,一般的应用没什么必要,UseParallelGC 并行回收,XX:ParallelGCThreads 并行回收线程数,只有配置了UseParallelGC有效。UseAdaptiveSizePolicy,让jvm根据情况动态适配参数,当然如果你指定了某些参数,jvm就不会对那些参数再去调整的,加这个参数只要是让我们考虑不全的其它参数能让jvm帮忙做微处理。 总之UseParallelGC目的是 加快jvm回收频率 。
关于垃圾回收更详细的文章请见:
下图只是简单的配置了:
JAVA_OPTS="-server -Xms1536m -Xmx1536m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
Tomcat堆内存的垃圾回收情况,可以看到默认是当系统使用到了阀值后进行GC回收
转自:http://blog.csdn.net/shuzui1985/article/details/8577233
相关推荐
Tomcat 是一个流行的 Web 服务器,Maven 提供了一个插件 tomcat8-maven-plugin 来实现 Maven 项目与 Tomcat 服务器的集成。下面我们将详细介绍如何使用 tomcat8-maven-plugin 插件。 tomcat8-maven-plugin 插件的...
值得注意的是,`tomcat-juli.jar`和`tomcat-juli-adapters.jar`的使用需要谨慎,因为错误的配置可能会导致日志输出混乱或者性能下降。例如,过度的日志记录会占用大量的磁盘空间,甚至影响服务器性能。因此,明智的...
《深入理解Tomcat-Redis-Session-Manager:在Tomcat7和Tomcat8中的应用》 在现代Web应用程序开发中,session管理是一个至关重要的环节,它涉及到用户会话的持久化和跨请求的数据共享。传统的session管理方式在高...
在安装和配置Apache Tomcat 11.0.0-M17时,需要注意以下几点: 1. **系统需求**:由于这是64位版本,所以要求操作系统也必须是64位的。此外,需要Java Development Kit(JDK)8或更高版本,因为Tomcat 11不支持JRE...
【标题】"tomcat-redis-session-manager包集合下载(tomcat8)"涉及的主要知识点是将Redis集成到Tomcat中管理会话(session),以提高Web应用的性能和可扩展性。 【描述】中提到的"所需的tomcat-redis-session-...
apache-tomcat-8.5.20.tar.gz源码包和context.xml文件,这套配置是我自己亲测可用的。。另外我用的redis4这个版本。注意:如果你使用的TOMCAT其他版本。例如tomcat6或者7这套JAR包可能不可用,tomcat8.0没有测试。...
【标题】"tomcat-redis-session-manager jar包"是一个用于集成Redis进行Session管理的Java库,特别设计用于Apache Tomcat服务器。这个库使得在多台Tomcat服务器之间共享和协调用户的Session数据成为可能,从而提高了...
文件名写错了,此压缩文件支持tomcat8.5。是否支持8.0请自行测试,本人只测试了8.5,可以使用。压缩文件包括tomcat-redis-session-manager-...apache-tomcat-8.5.33.tar.gz,nginx-1.6.2.tar.gz也打包进去,一步到位。
标题 "tomcat-redis-session-manager-1.2-tomcat-6&7" 指的是一个用于在Tomcat服务器中集成Redis作为session管理器的组件。这个组件使得Web应用程序可以利用Redis分布式缓存系统来存储和管理用户的会话数据,从而...
maven-tomcat-plugin让maven与tomcat配合得很好。它可以把应用部署到Tomcat服务器,也可以把tomcat作为内嵌服务器启动,就像jetty一样。 使用JPDA启动tomcat的远程调试功能。这样就能与eclipse配合起来,轻松地实现...
"tomcat9+tomcat-cluster-redis-session-manager_4.0.zip"这个文件组合涉及到的是在Tomcat 9上实现负载均衡以及使用Redis作为Session管理器的高级配置。 首先,Tomcat 9是Apache Tomcat服务器的一个版本,它是Java ...
Tomcat7是一个流行的开源应用服务器,它实现了Servlet和JSP规范,用于运行Java Web应用。而Maven是Apache软件基金会开发的一个项目管理和综合工具,它帮助开发者构建、管理和部署Java项目。 Maven插件是Maven生态...
值得注意的是,使用`tomcat-redis-session-manager`可能会带来额外的网络延迟,因为每次session操作都需要与Redis通信。因此,在大型分布式系统中,推荐将Redis部署在靠近应用服务器的网络位置,以减少延迟影响。 ...
用于配置 tomcat-redis-session-manager
标题中的“Tomcat8亲测可用 tomcat-redis-session-manager的jar包”指的是一个专为Tomcat8设计的,用于管理session的扩展组件。这个组件实现了将Tomcat应用服务器中的用户session数据存储到Redis分布式缓存系统中,...
在这个压缩包中,包含了两个版本:`apache-tomcat-6.0.35` 和 `apache-tomcat-6.0.35 src`。前者是Tomcat的可执行版本,后者则是源代码版本。 Apache Tomcat 6.0.35是一个稳定版的发布,它基于Java Servlet 2.5和...
"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...
6. **性能调优**:压力测试的结果可以指导我们对Tomcat进行性能调优,包括但不限于调整线程池大小、内存分配、JVM参数等,以提高服务器的响应速度和并发能力。 7. **并发测试**:ab工具的并发测试功能对于模拟实际...
【标题】"tomcat8.5-redis-session-manager-master.zip" 涉及的主要知识点是Tomcat服务器与Redis缓存系统的集成,特别是如何利用Redis来管理Tomcat的Session。 【描述】"tomcat-redis,session共享," 提示我们讨论...
对于大型的、高并发的Java Web应用来说,选择Tomcat-jdbc数据源是一个明智的选择,因为它能够提供优秀的性能和资源利用率。同时,通过合理配置和使用tomcat-juli.jar,开发者可以更好地理解和优化数据库连接池的行为...