描述

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

小计Tomcat的调优思路的更多相关文章

  1. tomcat配置调优与安全总结

    http://vekergu.blog.51cto.com/9966832/1672931 tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配 ...

  2. (转)Tomcat配置调优与安全总结

    tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配置和调优安全的文章非常散,通过参考各位大神的相关技术文档,根据作者对tomcat的运维经验, ...

  3. MySQL性能调优思路

    1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, ...

  4. MindSpore模型精度调优实战:常用的定位精度调试调优思路

    摘要:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight. 本文分享自华为云社区<技 ...

  5. nginx+keepalived+tomcat之tomcat性能调优

    body{ font-family: Nyala; font-size: 10.5pt; line-height: 1.5;}html, body{ color: ; background-color ...

  6. 性能测试培训:tomcat性能调优方法

    性能测试培训:tomcat性能调优方法   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner ...

  7. Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]

    http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a mat ...

  8. Tomcat性能调优实战

    今日帮朋友做了tomcat性能调优的实际操作,心得记录一下. 服务器:Windows2017 配置:CPU 4 内存 8G Tomcat8.0+版本. 压力测试工具:apache-jmeter-4.0 ...

  9. jvm调优思路及调优案例

    jvm调优思路及调优案例 ​ 我们说jvm调优,其实就是不断测试调整jvm的运行参数,尽可能让对象都在新生代(Eden)里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时 ...

随机推荐

  1. 【jQuery】动画小练习

    1.jQuery部分代码如下 <script type="text/javascript"> $(function(){ var page = 1; var i = 4 ...

  2. Monkeyrunner测试环境搭建

    Monkey手机APP压力测试,是对手机发送伪随机命令,对手机进行按键,触摸等操作,MonkeyRunner是对其发送重复操作的命令,是Monkey的进阶版,可以设置重复的操作或者是重现步骤等.相比较 ...

  3. 3.C++和C混合编程

    最近经常看到头文件中有 #ifdef __cplusplus extern "C" { #endif ....... #ifdef __cplusplus } #endif 这样的 ...

  4. ansible copy 模块 changed false 没有变化

    在分发配置文件的时候,我用命令ansible big_hosthub  -m copy -a "src=/home/clouder/deploy-conf.xml dest=/home/cl ...

  5. C#泛型约束 (转载)

    六种类型的约束: T:结构 类型参数必须是值类型.可以指定除 Nullable 以外的任何值类型.有关更多信息,请参见使用可空类型(C# 编程指南). T:类 类型参数必须是引用类型,包括任何类.接口 ...

  6. Oracle数据库对表基本的操作--增删查改

    --向student表中加入入学时间属性,其数据类型为日期型alter table student add scome date; --删除student表中的入学时间属性alter table st ...

  7. ZJOI2008]树的统计(树链剖分,线段树)

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  8. grub启动引导程序配置及命令行接口详解

    Grub(GRand Unified Bootloader),统一资源引导器,它的工作是提供一个菜单,允许用户选择要启动的系统或不同的内核版本:把用户选定的内核装载到RAM中的特定空间中,然后解压.展 ...

  9. iOS 12.0-12.1.2 越狱教程

    unc0ver V3.0.0~b29 越狱工具已经开始公测,支持搭载 A8X-A11 处理器的 iOS 12.0-12.1.2 设备完整越狱,Cydia 商店和 Substrate 插件可正常安装并运 ...

  10. scss基本用法

     特别说明:scss函数名中的中划线和下划线是等同的,font-size和font_size指向同一个函数. 1.变量 2.选择器嵌套 3.属性嵌套 规则如下: (1).把属性名从中划线-的地方断开. ...