描述

最近在补充自己的短板,刚好整理到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. 2019.2.27 Eclipse中的Tomcat设置Tomcat服务器手动重启

    1.打开Tomcat的设置界面 2.找到Modules界面 3.去掉,就改为手动了

  2. [转]OpenGL与CUDA互操作方式总结

    一.介绍 CUDA是Nvidia推出的一个通用GPU计算平台,对于提升并行任务的效率非常有帮助.本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直上不来.于是就尝试把 ...

  3. Ubuntu安装PHP7

    安装PHP7 Ubuntu 16.04官方源自带PHP7,所以可以直接使用apt-get来安装. (1)安装PHP7以及常用扩展. -fpm php7.-mysql php7.-common php7 ...

  4. 数据包式套接字:基于UDP协议的Socket网络编程

    步骤: 1.利用DatagramPacket封装数据包: 2.利用DatagramSocket发送数据包: 3.利用DatagramSocket接收数据包: 4.利用DatagramPacket处理数 ...

  5. [USACO08JAN]电话线$Telephone \ \ Lines$(图论$+SPFA+$ 二分答案)

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 给定一个图,请你求出在把其中自由选择的\(k\)条的权值都置为零的情况下,图中\(1-N\)最短路上的 ...

  6. cocos2d-x 音效中断问题

    做跑酷重吃金币播音效时,播放其它音效会使得音效所有中断,最后发现时音效上限的问题,2.2.3默认的似乎是5个音效,改动成50后问题解决. 在java中的org.cocos2dx.lib包下有一个Coc ...

  7. 用jQuery编写简单九宫格抽奖

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Go语言之旅:基本类型

    原文地址:https://learn-linux.readthedocs.io 欢迎关注我们的公众号:小菜学编程 (coding-fan) Go 内置了以下基本类型: 布尔 bool 字符串 stri ...

  9. Oracle 统计信息

    Oracle数据库中的统计信息是这样一组数据:它存储在数据字典中,且从多个维度描述了Oracle数据库里对象的详细信息. CBO会利用这些统计信息来计算目标SQL各种可能的,不同的执行路径的成本,从中 ...

  10. BZOJ 3489: A simple rmq problem(K-D Tree)

    Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 2579  Solved: 888[Submit][Status][Discuss] Descripti ...