Tomcat 调优的技巧
- 转载:www.cnblogs.com/wangsen, https://mp.weixin.qq.com/s/WrIsOOyR7o4SwSXMT0Zecg
最近,看到一篇讲述 Tomcat 调优的文章,写得挺不错的,由于之前写了好几篇关于 Tomcat 的文章,这篇分享给各位读者,做一下补充。
原文如下。
一、描述
最近,在补充自己的短板,刚好整理到 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。
1、Tomcat的自身调优
采用动静分离节约 Tomcat 的性能
调整 Tomcat 的线程池
调整 Tomcat 的连接器
修改 Tomcat 的运行模式
禁用 AJP 连接器
2、JVM的调优
调优Jvm内存
二、Tomcat 自身调优
1、采用动静分离
静态资源如果让 Tomcat 处理的话 Tomcat 的性能会被损耗很多,所以我们一般都是采用:Nginx+Tomcat 实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,Nginx 实现静态资源的访问。
2、调优 Tomcat 线程池
打开tomcat的serve.xml,配置Executor,相关参数说明如下。

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

executor:指定这个连接器所使用的执行器(线程池);

enableLookups=false:关闭 DNS 解析,减少性能损耗;
minProcessors:服务器启动时创建的最少线程数;
maxProcessors:最大可以创建的线程数;
acceptCount=1000:线程池中的线程都被占用,允许放到队列中的请求数;
maxThreads=3000:最大线程数;
minSpareThreads=20:最小空闲线程数,这里是一直会运行的线程;
与压缩有关系的配置:如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了;
一个完整的配置如下。

4、通过修改 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 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖
提升 Tomcat 对静态文件的处理性能,当然也可以采用动静分离。
5、禁用 AJP 连接器
AJP的全称 Apache JServer Protocol,使用 Nginx+Tomca t的架构,所以用不着 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"
调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。
参考
https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html
https://tomcat.apache.org/tomcat-8.0-doc/config/index.html
name:给执行器(线程池)起一个名字;
namePrefix:指定线程池中的每一个线程的 name 前缀;
maxThreads:线程池中最大的线程数量,假设请求的数量超过了 750,这将不是意味着将 maxThreads 属性值设置为 750,它的最好解决方案是使用「Tomcat集群」。也就是说,如果有 1000 请求,两个 Tomcat 实例设置 maxThreads = 500,而不在单 Tomcat 实例的情况下设置 maxThreads=1000。
minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死);
maxIdLeTime:一个线程空闲多久算是一个空闲线程;
其他的配置其实阅读官方文档是最好的「见参考链接」。
Tomcat 调优的技巧的更多相关文章
- Tomcat 调优的技巧 (转)
描述 最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下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 ...
随机推荐
- mongoose 常用数据库操作 插入
项目 db.js var mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1:27017/whhhh', { u ...
- Delphi中点击网页弹出的Alert对话框的确定按钮
思路: 使用Windows API函数遍历窗口,查找指定标题的窗口,然后从该窗口查找确定按钮,向该按钮发送鼠标消息进行模拟点击.由于IE8由Alert弹出的网页对话框的标题是“来自网页的消息”,而IE ...
- Vue学习笔记【24】——Vue组件(组件切换)
使用flag标识符结合v-if和v-else切换组件 页面结构:(缺点:只适用于两个组件间切换,不适合多个) <div id="app"> <input ...
- 牛客 某练习赛 Data Structure
Data Structure 题目描述 将一个非负整数序列划分为 \(K\) 段,分别计算出各段中的整数按位或的结果,然后再把这些结果按位与起来得到一个最终结果,把这个最终结果定义为这个序列的一个 \ ...
- 【Flutter学习】基本组件之图片组件Image
一,概述 Image(图片组件)是显示图像的组件,一个显示图片的widget,支持图像格式:JPEG,PNG,GIF,动画GIF,WebP,动画WebP,BMP和WBMP. Image组件有多种构造函 ...
- ac自动机fail树上按询问建立上跳指针——cf963D
解法看着吓人,其实就是为了优化ac自动机上暴力跳fail指针.. 另外这题对于复杂度的分析很有学习价值 /* 给定一个母串s,再给定n个询问(k,m) 对于每个询问,求出长度最小的t,使t是s的子串, ...
- CSS适配,方案
1.尺寸常用单位: https://www.cnblogs.com/whitewolf/p/css-em-px-percentage.html px.em.rem.% 2.CSS的长度单位适配方案 ...
- NYOJ 737 (石子合并)
该题是一道DP题,核心思想如下: 某个区间一定是这个区间内的某两个子区间合成的(这两个子区间互补,即这两个区间加起来等于大区间), 所以我们枚举所有的情况,取个最大值即可.因为最初是从2堆石子开始无法 ...
- Java-Class-FC:java.time.Duration
ylbtech-Java-Class-FC:java.time.Duration 1.返回顶部 2.返回顶部 3.返回顶部 1. /* * Copyright (c) 2012, 2015, ...
- SPSS聚类分析:K均值聚类分析
SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...