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 ...
随机推荐
- 论文阅读:Fast, Scalable, and Programmable Packet Scheduler in Hardware
摘要: 随着链接速度的提高和CPU扩展速度的放缓,软件中的数据包调度会导致较低的精度和较高的CPU利用率. 通过将数据包调度卸载到诸如NIC之类的硬件,可以潜在地克服这些缺点.然而为了保持软件分组调度 ...
- TCP如何保证可靠传输
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- 3.1 JAVA集合框架以及区别
涉及的参考链接:https://www.runoob.com/java/java-collections.html,http://how2j.cn/k/collection/collection-ar ...
- 在linux 系统下 使用命令行对mysql 数据库进行操作
1.连接mysql root@test:/home# mysql -uroot -proot <uroot是用户名,proot是密码> 2.查询所有的库 mysql> show da ...
- mongo注解详解
1.@Entity如果你想通过Morphia把你的对象保存到Mongo中,你首先要做的是使用@Entity注解你的类:@Entity(value="comm_user_favorite_co ...
- 如何把java项目打包成war包
用Eclipse手动打包 右击工程名 选择Export… 选择Web → WAR file 点击Browse,选择导出路径 然后war包就被导出来啦~是不是很简单呢 利用Maven的package命令 ...
- Could not parse configuration: /hibernate.cfg.xml
hibernate需要联网验证dtd,错误原因:未联网或网速不行
- Git-Runoob:Git Github
ylbtech-Git-Runoob:Git Github 1.返回顶部 1. Git 远程仓库(Github) Git 并不像 SVN 那样有个中心服务器. 目前我们使用到的 Git 命令都是在本地 ...
- Link标签
Link标签的属性:rel定义当前文档与目标文档之间的关系. rev定义目标文档与当前文档之间的关系. Link和@import的区别: 1.隶属上的差别 link是一个html的一个标 ...
- redhat下配置SEED DVS6446开发环境2
---恢复内容开始--- 1.rpcbind步骤 linux包:portmap安装包 libgssglue-0.1-8.1.el6.i686.rpm libtirpc-0.2.1-1.el6.i68 ...