小计Tomcat的调优思路
描述
最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优
都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,
tomcat调优大致分为两大类:
一、tomcat的自身调优
- 采用动静分离节约tomcat的性能
- 调整tomcat的线程池
- 调整tomcat的连接器
- 修改tomcat的运行模式
- 禁用AJP连接器
二、jvm的调优
- 调优Jvm内存
tomcat自身调优
采用动静分离
静态资源如果让tomcat处理的话tomcat的性能会被损耗很多,所以我们一般都是采用:nginx+tomcat实现动静分离,
让 Tomcat 只负责 jsp 文件的解析工作,nginx实现静态资源的访问。
调优tomcat的线程池
- 打开tomcat的serve.xml
- 配置Executor

参数解释
- name
给执行器(线程池)起一个名字 - namePrefix
指定线程池中的每一个线程的name前缀 - maxThreads
线程池中最大的线程数量
假设:请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,它的最好解决方案是使用“Tomcat集群”。
也就是说,如果有“1000”请求,两个Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的情况下设置maxThreads=1000。 - minSpareThreads
线程池中允许空闲的线程数量(多余的线程都杀死) - maxIdLeTime
一个线程空闲多久算是一个空闲线程
其他的配置其实阅读官方文档是最好的:
tomcat8的配置文档
调优tomcat的连接器Connector
- 打开tomcat的serve.xml
- 配置Connector

参数解释
executor
指定这个连接器所使用的执行器(线程池)

enableLookups="false"
关闭dns解析,减少性能损耗minProcessors
服务器启动时创建的最少线程数maxProcessors
最大可以创建的线程数acceptCount="1000"
线程池中的线程都被占用,允许放到队列中的请求数maxThreads="3000"
最大线程数minSpareThreads="20"
最小空闲线程数,这里是一直会运行的线程和压缩有关系的配置
如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,
那么也就不需要配置在 Tomcat 中配置压缩了一个完整的配置
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000" ##超时时间,毫秒,这里是20秒
redirectPort="443"
maxThreads="3000" ##最大线程数
minSpareThreads="20" ##最小空闲线程数,这里是一直会运行的线程
acceptCount="1000" ##接收的队列数
enableLookups="false" ##关闭dns解析,减少性能损耗
server="None"
URIEncoding="UTF-8"
/>
通过修改tomcat的运行模式
BIO
- Tomcat8以下版本,默认使用的就是BIO(阻塞式IO)模式

对于每一个请求都要创建一个线程来进行处理,不适合高并发
NIO
- Tomcat8以上版本,默认使用的就是NIO模式
- 非阻塞式Io
APR(Apache Portable Runtime)
- 是Tomcat生产环境运行的首选方式
- 如果操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,
则apr模式无法启动,自动切换启动nio模式。
所以必须要安装apr和native,直接启动就支持apr - apr是从操作系统级别解决异步IO问题,apr的本质就是使用jni(java native interface)
技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖 - 提升Tomcat对静态文件的处理性能,当然也可以采用动静分离
禁用AJP连接器
Apache JServer Protocol
使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用

JVM的调优
tomcat是运行在jvm上的,所以对jvm的调优也是非常有必要的。
调优内存
找到:catalina.sh

添加的位置

尝试的参数设置
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求,
结尾
- 这里只是简单记录一下调优都有哪些途径,更多的是找出思路,具体怎么调需要我们根据实际情况去验证调整。
- 推荐书籍:HowTomcatWorks
小计Tomcat的调优思路的更多相关文章
- tomcat配置调优与安全总结
http://vekergu.blog.51cto.com/9966832/1672931 tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配 ...
- (转)Tomcat配置调优与安全总结
tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配置和调优安全的文章非常散,通过参考各位大神的相关技术文档,根据作者对tomcat的运维经验, ...
- MySQL性能调优思路
1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, ...
- MindSpore模型精度调优实战:常用的定位精度调试调优思路
摘要:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight. 本文分享自华为云社区<技 ...
- nginx+keepalived+tomcat之tomcat性能调优
body{ font-family: Nyala; font-size: 10.5pt; line-height: 1.5;}html, body{ color: ; background-color ...
- 性能测试培训:tomcat性能调优方法
性能测试培训:tomcat性能调优方法 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner ...
- Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]
http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a mat ...
- Tomcat性能调优实战
今日帮朋友做了tomcat性能调优的实际操作,心得记录一下. 服务器:Windows2017 配置:CPU 4 内存 8G Tomcat8.0+版本. 压力测试工具:apache-jmeter-4.0 ...
- jvm调优思路及调优案例
jvm调优思路及调优案例 我们说jvm调优,其实就是不断测试调整jvm的运行参数,尽可能让对象都在新生代(Eden)里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时 ...
随机推荐
- Hadoop学习之路(二十一)MapReduce实现Reduce Join(多个文件联合查询)
MapReduce Join 对两份数据data1和data2进行关键词连接是一个很通用的问题,如果数据量比较小,可以在内存中完成连接. 如果数据量比较大,在内存进行连接操会发生OOM.mapredu ...
- Odoo字段类型
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9278620.html 一:基本字段类型 Binary:二进制类型,用于保存图片.视频.文件.附件等,在视 ...
- Spring(四)之Bean生命周期、BeanPost处理
一.Bean 生命周期 Spring bean的生命周期很容易理解.当bean被实例化时,可能需要执行一些初始化以使其进入可用状态.类似地,当不再需要bean并从容器中移除bean时,可能需要进行一些 ...
- 网络测量中基于Sketch方法的调查
目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...
- CentOS7开发环境搭建
BIOS开启VT支持 查询笔记本进入BIOS的按键,启动BIOS的虚拟化设置 假设安装360卫士,那么请永久关闭Intel-VT核晶防护引擎 CentOS DNS配置 Linux 下设置DNS位置有3 ...
- java点滴之MulticastSocket的使用
一基本概念 该类恰是上文介绍的DatagramSocket的子类. DatagramSocket仅仅同意数据报发送给指定的目标地址,而MulticastSocket能够将数据报以广播的方式发送到多个c ...
- oracle同义词语句备份
--创建同义词create synonym T_SYSTEM_USERDEPARTMENT for xtzl.T_SYSTEM_USERDEPARTMENT;--查询同义词SELECT * FROM ...
- 转发: Angular装饰器
Angular中的装饰器是一个函数,它将元数据添加到类.类成员(属性.方法)和函数参数. 用法:要想应用装饰器,把它放在被装饰对象的上面或左边. Angular使用自己的一套装饰器来实现应用程序各部件 ...
- ORM一对多查询
现有两张表,一张书籍表(Book),一张作者表(Author) 现在想查询出书本信息和书本的作者 book=Book.objects.get(name="python") book ...
- 【Linux】Linux文件跟目录管理
熟悉Linux的大家都知道,在Linux中,一切皆文件,可能在有些人的理解中,Linux跟我们的Windows差不多,是都具有图形操作界面的一种操作系统,但是更深入的来说,Linux更偏向于用命令操作 ...