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
转载:www.cnblogs.com/wangsen
Tomcat 调优的技巧 (转)的更多相关文章
- Tomcat 调优的技巧
转载:www.cnblogs.com/wangsen, https://mp.weixin.qq.com/s/WrIsOOyR7o4SwSXMT0Zecg 最近,看到一篇讲述 Tomcat 调优的文章 ...
- [转]Tomcat 调优的技巧
原文地址:https://mp.weixin.qq.com/s/7_bz3OPoH3x7xkkwkhJhbw Tomcat调优这块,在面试中会经常问道.目前Tomcat调优主要分为2大类,当前解释用的 ...
- Tomcat 调优技巧
Tomcat 调优技巧:1.Tomcat自身调优: ①采用动静分离节约Tomcat的性能: ②调整Tomcat的线程池: ③调整Tomcat的连接器: ④修改Tomcat的运行模式: ⑤禁用AJP连接 ...
- 【转】Tomcat调优指南
转载地址:http://blog.csdn.net/woohooli/article/details/3954792 1 概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可 ...
- Tomcat调优及JMX监控
Tomcat调优及JMX监控 实验背景 ====================================================== 系统版本:CentOS release 6.5 ( ...
- tomcat调优的几个方面(转)
tomcat调优的几个方面 和早期版本相比最新的Tomcat提供更好的性能和稳定性.所以一直使用最新的Tomcat版本.现在本文使用下面几步来提高Tomcat服务器的性能. 增加JVM堆内存大小 修复 ...
- tomcat 调优-生产环境必备
目录 1. tomcat 启动慢 1.1 tomcat 获取随机值阻塞 1.2 tomcat 需要部署的web应用程序太多 1.3 tomcat启动内存不足 2 Connector 调优 2.2 Co ...
- Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)
Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...
- 简谈Tomcat调优
一.Tomcat和apache的比较 共同点:apache和tomcat都是属于web服务器. 不同点:他们是两个不同的容器,承载的东西不一样,tomcat属于一种java应用的服务 器,只针对jav ...
随机推荐
- 【POJ1011】Sticks
[题目概括] 现在有\(n\)个长度不超过\(50\)的木棍,请你把这些小木棍拼成若干根长度相同的木棍. 请你最小化拼成后的长度. [思路要点] 考虑枚举最后的长度,然后判断是否可以,这样就不需要最优 ...
- Vue.js——vue-resource详细介绍
概述 Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的一款插件,它可以通过 ...
- git branch查看不到分支的名字解决办法
git branch查看不到分支的名字解决办法 <!-- 1. 先初始化 --> git init; <!-- 2. 接着创建瑶瑶的专属分支 --> git checkout ...
- Linux命令-磁盘管理(一)
Linux命令-磁盘管理(一) Linux cd命令 Linux cd命令用于切换当前工作目录至 dirName(目录参数). 其中 dirName 表示法可为绝对路径或相对路径.若目录名称省略,则变 ...
- classpath说明
概念解释: classpath : 即项目中WEB-INF下面的classes目录; 应用: [01] src路径下的文件在编译后会放到WEB-INF/classes路径下.默认的classpath是 ...
- BZOJ 3456 城市规划 (组合计数、DP、FFT)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 著名的多项式练习题,做法也很多,终于切掉了纪念 首先求一波递推式: 令\(F(n ...
- Spring boot之JPA/Hibernate/Spring Data
1.什么是JPA? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Per ...
- C++入门经典-例3.6-判断某一年是否是闰年之复合表达式法
1:代码如下: // 3.6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- 函数-this
1.this. 解析器在调用函数的时候,每次都会向函数内部传递进一个隐含的参数(即this): this指向一个对象,这个对象称为函数执行的上下文对象.根据函数的调用方式的不同,this会指向不同的对 ...
- 将文件夹上传到FTP服务器,遍历上传,,,文件夹不能直接上传到FTP服务器上。。。
<? $ftp_ip = "FTP"; $ftp_user = "user"; $ftp_pwd = "password"; $con ...