描述

最近在补充自己的短板,刚好整理到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"
/>

*关于Connector的配置文档

通过修改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 调优的技巧 (转)的更多相关文章

  1. Tomcat 调优的技巧

    转载:www.cnblogs.com/wangsen, https://mp.weixin.qq.com/s/WrIsOOyR7o4SwSXMT0Zecg 最近,看到一篇讲述 Tomcat 调优的文章 ...

  2. [转]Tomcat 调优的技巧

    原文地址:https://mp.weixin.qq.com/s/7_bz3OPoH3x7xkkwkhJhbw Tomcat调优这块,在面试中会经常问道.目前Tomcat调优主要分为2大类,当前解释用的 ...

  3. Tomcat 调优技巧

    Tomcat 调优技巧:1.Tomcat自身调优: ①采用动静分离节约Tomcat的性能: ②调整Tomcat的线程池: ③调整Tomcat的连接器: ④修改Tomcat的运行模式: ⑤禁用AJP连接 ...

  4. 【转】Tomcat调优指南

    转载地址:http://blog.csdn.net/woohooli/article/details/3954792 1          概述 本文档主要介绍了Tomcat的性能调优的原理和方法.可 ...

  5. Tomcat调优及JMX监控

    Tomcat调优及JMX监控 实验背景 ====================================================== 系统版本:CentOS release 6.5 ( ...

  6. tomcat调优的几个方面(转)

    tomcat调优的几个方面 和早期版本相比最新的Tomcat提供更好的性能和稳定性.所以一直使用最新的Tomcat版本.现在本文使用下面几步来提高Tomcat服务器的性能. 增加JVM堆内存大小 修复 ...

  7. tomcat 调优-生产环境必备

    目录 1. tomcat 启动慢 1.1 tomcat 获取随机值阻塞 1.2 tomcat 需要部署的web应用程序太多 1.3 tomcat启动内存不足 2 Connector 调优 2.2 Co ...

  8. Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

    Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...

  9. 简谈Tomcat调优

    一.Tomcat和apache的比较 共同点:apache和tomcat都是属于web服务器. 不同点:他们是两个不同的容器,承载的东西不一样,tomcat属于一种java应用的服务 器,只针对jav ...

随机推荐

  1. Linux命令-文件管理(三)

    Linux more命令 Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(bac ...

  2. week6 作业

    week6 作业 1.每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为"etc-年-月-日-时-分.tar.gz" crontab -e */1 * * ...

  3. MySQL数据库入门——备份数据库

    mysqldump可以针对单个表.多个表.单个数据库.多个数据库.所有数据库进行导出的操作 mysqldump常用选项 -h, --host=name:服务器IP -u, --user=name:登录 ...

  4. linux crontab 定时任务,任务命令单独linux执行正常,放定时任务就不执行了,解决办法 (原)

    这是我crontab里面的内容 */30 * * * *  ./usr/bin/wget -q -O sync_log.txt http://fly.dllm.cn/index.php/Home/In ...

  5. 微信小程序需求IIS服务器配置https关于SSL,TLS的综合解决方案

    SpringBoot配置SSL同时支持http和https访问 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Socke ...

  6. C++入门经典-例5.20-右值引用传递参数

    1:使用字面值(如1.3.15f.true),或者表达式等临时变量作为函数实参传递时,按左值引用传递参数会被编译器阻止.而进行值传递时,将产生一个和参数同等大小的副本.C++11提供了右值引用传递参数 ...

  7. python3笔记十二:python数据类型-Dictionary字典

    一:学习内容 字典概念 字典创建 字典访问 字典添加 字典删除 字典遍历 字典与列表比较 二:字典概念 1.使用键值对(key-value)存储,具有极快的查找速度 2.注意:字典是无序的 3.特性: ...

  8. setcookie()函数

    PHP PDO使用fetchAll()方法获取结果集 fetchAll()方法获取结果集中的所有行数据记录. fetchAll()方法的语法格式如下: array PDOStatement::fetc ...

  9. webDriver各版本对应

    chromeDriver http://npm.taobao.org/mirrors/chromedriver/ http://chromedriver.storage.googleapis.com/ ...

  10. 使用多块GPU进行训练 1.slim.arg_scope(对于同等类型使用相同操作) 2.tf.name_scope(定义名字的范围) 3.tf.get_variable_scope().reuse_variable(参数的复用) 4.tf.py_func(构造函数)

    1. slim.arg_scope(函数, 传参) # 对于同类的函数操作,都传入相同的参数 from tensorflow.contrib import slim as slim import te ...