Tomcat性能优化总结

层级优化!(JAVA_OPTS参数和主要元素的优化)

Tomcat大致元素架构:server--->service-->Engine-->Host-->Context

Tomcat有可以使用三种协议:HTTPAJPHTTPS

tomcat默认采用的BIO模型

tomcat的运行模式有3种bio,nio,apr(额外安装),例如:

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

Tomcat各个元素里面都有listener监听器,由Service层的连接器connector通过线程池(Thread Pool)调用执行器(Executor),Connector的作用是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程携带该request和response交给绑定的Engine来处理,最后把处理后的Request和Response返回给客户端。

tomcat在启动时,会将web项目中WEB-INF/web.xml和自己的conf/web.xml进行合并,然后在ContextConfig类下的configureContext()统一解析这些内容

所以,不必要的配置要删除,以减少Tomcat解析成本。

像在conf/web.xml的DefaultServlet或JspServlet,jspmap,mime,欢迎页面按需来配置。

conf/server.xml的Listener监听器中,VersionLoggerListener作用是显示版本和JDK环境,可以删除;AprLifecycleListener作用:加载APR库使用,这个配置仅当connector的protocol设置为AJP/1.3时有用,如果非AJP/1.3,可以删除。

GlobalResourcesLifecycleListener作用于全局资源

GlobalNamingResources可以定义全局资源,可以看出,这个tomcat的默认配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的。tomcat-user.xml用于定义tomcat管理页面相关配置,如果不登录管理界面可以删掉。

tomcat需要集成到Apache服务器时才使用这个<connector protocol=”AJP/1.3”/>

Server元素的port监听关闭服务的请求

Connector

port:指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求

minProcessors:服务器启动时创建的处理请求的线程数

maxProcessors:最大可以创建的处理请求的线程数

enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

redirectPort:指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

maxConnections:达到这个值之后,将继续接受连接,但是不处理,能继续接受多少根据acceptCount的值

minSpareThreads:最小空闲线程数

connectionTimeout:指定超时的时间数(以毫秒为单位)

tomcat默认连接池有限制,可以为connector配置自己的连接池,例如:

<Connector executor="tomcatThreadPool"port="8080" protocol="HTTP/1.1"

jvm参数优化

tomcat是用Java写的,就要运行在jvm上,垃圾处理方式等都要遵循jvm的方式。tomcat中设置jvm参数在 catalina.sh(Linux)和catalina.bat(windows)中,以JAVA_OPTS变量存储。

各参数详解:

-Xms:设置JVM初始内存大小(默认是物理内存的1/64)

-Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)

-Xmn:设置JVM最小内存(128-256m就够了,一般不设置)

 

-XX:PermSize :为JVM启动时Perm的内存大小

-XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M)

-XX:MaxNewSize,默认为16M

-XX:NewSize :默认为2M,此值设大可调大新对象区,减少Full
GC次数

-XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)

-XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空

间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)

-XX:userParNewGC 可用来设置并行收集【多CPU】

-XX:ParallelGCThreads 可用来增加并行度【多CPU】

-XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】

1. conf/server.xml中Executor对应的相关参数

<!--连接池设置-->
<Executor 
name="tomcatThreadPool" --线程池名
namePrefix="catalina-exec-" --线程名称前缀 namePrefix+threaNumber
maxThreads="1000" --池中最大线程数
minSpareThreads="100" --活跃线程数 会一直存在
maxIdleTime="60000" --线程空闲时间,超过该时间,线程会被销毁 ms
maxQueueSize="Integer.MAX_VALUE" --被执行前线程的排队数目
prestartminSpareThreads="false" --启动线程池时,是否启用minSpareThreads部分线程
threadPriority="5" --线程池中线程优先级 1~10
className="org.apache.catalina.core.StandardThreadExecutor" --线程实现类 自定义线程需时间 org.apache.catalina.Executor类
/>
<!--当配置了连接池时,需要配置该连接器-->
<Connector 
executor="tomcatThreadPool" --线程池名
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />

2.conf/server.xml中Connector对应的相关参数


<Connector 
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol" --协议类型 
disableUploadTimeout="true"
keepAliveTimeout="20000"
connectionTimeout="20000" --已接受,但未被处理的请求的等待超时时间 ms
redirectPort="8443" --安全通信的转发端口 
URIEncoding="UTF-8"--URL编码字符集
minSpareThreads="100" --默认初始化和保持空闲的线程数
enableLookups="false"--关闭DNS反向查询
useURIValidationHack="false" --关闭不必要的检查
maxThreads="1000" --处理请求线程的最大数目 未配置为200 此属性会被忽略
acceptCount="1000" --所用可能的线程都在使用时传入连接请求的最大长度
disableUploadTimeout="true" --设置允许更长的超时连接
maxConnections="1000"--接受和处理的最大连接数(nio/nio2 1000,apr 8192)
maxHttpHeaderSize="8192"--请求和响应http头的最大大小 8k
tcpNoDelay="true" --tcp不延迟
compression="on"--是否启用压缩 on off force 
compressionMinSize="2048" --压缩前数据最小值 2k byte
noCompressionUserAgents="gozilla,traviata" --设置哪些浏览器不压缩
compressableMimeType="text/html,text/xml,text/css,application/javascript,text/plain" --设置压缩的文件类型
/>

3. 有关 JAVA_OPTS

set JAVA_OPTS=
-server 
-Xms1000M 
-Xmx1000M #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xss512k 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+DisableExplicitGC 
-XX:MaxTenuringThreshold=15 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:LargePageSizeInBytes=128m 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly

-Djava.awt.headless=true

4. 禁用8005端口

telnet localhost 8005 然后输入 SHUTDOWN 就可以关闭 Tomcat,为了安全我们要禁用该功能

默认值:

<Server port="8005" shutdown="SHUTDOWN">
修改为:

<Server port="-1" shutdown="SHUTDOWN">
---------------------

转载于:https://www.cnblogs.com/Haihong72H/p/11008625.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网大脑如何产生“梦境“并形成元宇宙

作者&#xff1a;刘锋本文摘录自2019年中信出版社出版的《崛起的超级智能&#xff0c;互联网大脑如何影响科技未来》的第二章“10条规则&#xff1a;互联网大脑如何影响科技企业的命运”中的“第九条规则&#xff0c;互联网大脑梦境的构建带来产业升级”。这一节详细阐述了互联…

2022年人工智能领域发展七大趋势

来源&#xff1a;科技日报编辑&#xff1a;蒲蒲美国《福布斯》网站在近日的报道中指出&#xff0c;尽管目前很难想象机器自主决策所产生的影响&#xff0c;但可以肯定的是&#xff0c;当时光的车轮到达2022年时&#xff0c;人工智能领域新的突破和发展将继续拓宽我们的想象边界…

数据库基础知识——DQL语言(一)

文章目录1.基础查询2.条件查询3.排序查询4.常见函数4.1 单行函数4.1.1 字符函数4.1.2 数学函数4.1.3 日期函数4.1.4 流程控制函数4.1.5 其他函数4.2 分组函数/统计函数/聚合函数5.分组查询1.基础查询 语法&#xff1a; SELECT 要查询的东西 【FROM 表名】;#查询employees表中所…

Linux安装MariaDB(Mysql)和简单配置

安装MariaDB 安装命令yum -y install mariadb mariadb-server安装完成MariaDB&#xff0c;首先启动MariaDBsystemctl start mariadb设置开机启动systemctl enable mariadbMariaDB的相关简单配置mysql_secure_installation首先是设置密码&#xff0c;会提示先输入密码Enter curr…

数据库基础知识——DQL语言(二)

文章目录1.多表连接查询1.1 sql92语法1.1.1 等值连接1.1.2 sql92:非等值连接1.1.3 sql92:自连接1.2 sql99语法1.2.1 等值连接1.2.2 非等值连接1.2.3 内连接1.2.4 左右连接&#xff08;外连接&#xff09;2.子查询2.1 where或者having后面3.分页查询4.联合查询1.多表连接查询 笛…

周志华教授发表首届国际学习与推理联合大会IJCLR开场Keynote:探索从纯学习到学习+推理的AI...

周志华&#xff0c;毕业于南京大学&#xff0c;欧洲科学院外籍院士&#xff0c;国家杰出青年基金获得者&#xff0c;现任南京大学人工智能学院院长、南京大学计算机软件新技术国家重点实验室常务副主任、机器学习与数据挖掘研究所 (LAMDA)所长、人工智能教研室主任。2021年8月1…

第八章 指针实验

C程序实验报告 实验项目&#xff1a; 1、指针基础及指针运算 2、数据交换 3、字符串反转及字符串连接 4、数组元素奇偶排列 姓名&#xff1a;曹时仙 实验地点&#xff1a;教学楼514教室 实验时间&#xff1a;2019.6.12 一、实验目的与要求 1、掌握指针的概念和定义方法 2、掌…

大脑的学习方式如何,机器学习与生物学习的联系将提供「答案」

来源&#xff1a;ScienceAI编辑&#xff1a;凯霞准确指出神经活动如何随着学习而变化&#xff0c;不是黑白分明的。有人认为大脑中的学习或生物学习可以从优化的角度来考虑&#xff0c;这就是在计算机或机器人等人工网络中学习的方式。由卡内基梅隆大学和匹兹堡大学的研究人员共…

数据库基础知识——DML语言

文章目录1.插入2.修改3.删除1.插入 语法&#xff1a; insert into 表名(字段名&#xff0c;...) values(值1&#xff0c;...);特点&#xff1a; 1、字段类型和值类型一致或兼容&#xff0c;而且一一对应 2、可以为空的字段&#xff0c;可以不用插入值&#xff0c;或用null填…

Go语言交叉编译工具gox

基本介绍 交叉编译是为了在不同平台编译出其他平台的程序&#xff0c;比如在Linux编译出Windows程序&#xff0c;在Windows能编译出Linux程序&#xff0c;32位系统下编译出64位程序&#xff0c;今天介绍的gox就是其中一款交叉编译工具。 配置环境 首先配置好Go语言的环境变量&a…

登顶Nature | DeepMind用AI首次实现数学领域重大进展,助力科学家证实两大猜想

来源&#xff1a;AI科技评论作者&#xff1a;杏花、莓酊编辑&#xff1a;琰琰数论是人类知识最古老的一个分支&#xff0c;然而它最深奥的秘密与其最平凡的真理是密切相连的。数学原理极易从事实中归纳出来&#xff0c;但证明却隐藏的极深。可以说数学&#xff0c;是一切科学的…

C++学习——类的多态

文章目录1.重载多态1.1 函数重载1.2 运算符重载2.强制多态3.类型参数化多态4.包含多态类的多态 多态是指同样的消息被不同类型的对象接收时导致不同的行为。 所谓消息是指对类成员函数的调用&#xff0c;不同的行为是指不同的实现&#xff0c;也就是调用了不同的函数。 在C中&a…

细胞如何获得秩序?除了形成细胞器,还可以发生相分离

来源&#xff1a;集智俱乐部作者&#xff1a;Viviane Callier译者&#xff1a;王百臻 审校&#xff1a;梁金 编辑&#xff1a;邓一雪 导语小小的细胞实际上是一个无比复杂的宇宙。DNA在细胞核中运筹帷幄&#xff0c;指导各种细胞器密切合作&#xff0c;产生功能各异的蛋白质。…

JS设置cookie、读取cookie、删除cookie

cookie是网站设计者放置在客户端的小文本文件&#xff0c;一般后台语言使用的比较多&#xff0c;可以实现用户个性化的一些需求。 javascript使用 document.cookie 来操作cookie同一个域名下的页面,共有一个cookie不同的浏览器分别管理自己的cookie,互不影响1.设置cookie // 设…

数据库基础知识——DDL语言

1.库的管理&#xff1a; 一、创建库 create database 库名#创建一个books库 create database books二、删除库 drop database 库名 三、修改库 rename database 旧库名 to 新库名2.表的管理&#xff1a; 2.1 创建表 CREATE TABLE IF NOT EXISTS stuinfo(stuId INT,stuName V…

从人类交互通信发展简史看元宇宙发展趋势及商业价值

来源&#xff1a;科协频道从通信角度来看&#xff0c;人类社会通信方式的发展历程和趋势&#xff0c;它一共经历了以下几个阶段&#xff1a;通信方式的发展历程和趋势第一阶段几千年以前的人类通过口口相传的方式&#xff0c;实现人与人之间的通信&#xff0c;这种通信方式的深…

字符设备驱动

1 引言 APP&#xff1a;open("/dev/xxx")&#xff0c;read&#xff0c;write    ——  设备字符驱动文件包含属性、主设备号和次设备号C LibrarySystem call interface内核&#xff1a;根据文件类型为字符设备&#xff0c;查找字符设备。根据主设备号查找file_…

yii2的Console定时任务创建

https://www.cnblogs.com/dwj97/p/6632848.html 设置定时任务 linux下&#xff0c;运行crontab -e 30 21 * * * /usr/local/php/bin/php /your_project_path/yii test/test //应用程序 上面的例子表示每晚的21:30执行上面的定时程序 下面是定时任务设置的一些基本介绍 基本格…

数据库基础知识——TCL语言

1.TCL含义 TCL&#xff0c;事务控制语言。通过一组逻辑操作单元&#xff08;一组DML——sql语句&#xff09;&#xff0c;将数据从一种状态切换到另外一种状态&#xff0c;即要么全部成功&#xff0c;要么全部失败。2.特点 &#xff08;ACID&#xff09; 原子性(atomicity)&a…

谷歌时间晶体登上Nature,诺奖得主重大猜想成为现实

来源&#xff1a;机器之心没有能量的供给&#xff0c;没有能量的消耗&#xff0c;它的循环运动会永远持续下去。时间晶体就像是一个「永动机」在不同状态之间永久循环往复而不消耗任何能量。来自斯坦福大学、谷歌、马克思 普朗克复杂系统物理研究所和牛津大学的研究团队声称已…