Tomcat性能调优
nanshan 2024-11-24 19:36 28 浏览 0 评论
为了不超过tomcat的极限,你应该限制并发请求数不高于“200/CPU”,一台设备的Tomcat最大连接处理数=200 * cpu个数 * 0.7(实时响应系统的cpu最大占用率不应超过70%)
采用最适合连接器模式
Tomcat的连接器有三种,分别为
BIO:最原始的阻塞模式,可靠性最高
protocol属性值改为org.apache.coyote.http11.Http11Protocol即可:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Protocol"
connectionTimeout="20000" redirectPort="8443" />
NIO:Java实现的异步方式,改起来简单。Tomcat 9 默认
protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" redirectPort="8443" />
Apr:通过系统层面的API实现,性能最好。
将protocol修改成org.apache.coyote.http11.Http11AprProtocol即可:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000" redirectPort="8443" />
APR则需要安装第三方库,在高并发下会让性能有明显提升。
具体安装办法可以参考http://www.cnblogs.com/huangjingzhou/articles/2097241.html
BIO、NIO、Apr模式的测试结果
对于这几种模式,我用ab命令模拟1000并发测试10000次,测试结果比较意外,为了确认结果,我每种方式反复测试了10多次,并且在两个服务器上都测试了一遍。结果发现Bio和Nio性能差别非常微弱,难怪默认居然还是Bio。但是采用apr,连接建立的速度会有50%~100%的提升。直接调用操作系统层果然神速啊,这里强烈推荐apr方式!
注:如果对于请求可靠性要求很高(例如支付),则还是保持bio为好。
BIO、NIO、Apr连接模式的区别
Java Blocking Connector Java Nio Blocking Connector APR/native Connector
BIO NIO APR
Classname AjpProtocol AjpNioProtocol AjpAprProtocol
Tomcat Version 3.x onwards 7.x onwards 5.5.x onwards
Support Polling NO YES YES
Polling Size N/A maxConnections maxConnections
Read Request Headers Blocking Sim Blocking Blocking
Read Request Body Blocking Sim Blocking Blocking
Write Response Blocking Sim Blocking Blocking
Wait for next Request Blocking Non Blocking Non Blocking
Max Connections maxConnections maxConnections maxConnections
maxThreads 连接数限制
maxThreads 是 Tomcat 所能接受最大连接数。一般可以在400-500。最大可以在800-1000左右,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。即在一个服务器上启动多个tomcat然后做负载均衡处理。
maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。
担心内存溢出增加参数:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/tomcat/xxxx
以便于在内存溢出时保存内存快照(快照文件与启动虚拟机的内存堆大小有关系,确保有足够的存储空间)
maxThreads 客户请求最大线程数
minSpareThreads 初始化时创建的 socket 线程数
maxSpareThreads 连接器的最大空闲 socket 线程数
maxIdleTime 线程最大空闲时间,超过或者可使用线程低于minSpareThreads会触发回收空闲线程
acceptCount 等于或者略大于 maxThreads,如果maxThreads=500 acceptCount >=500
具体配置根据应用本身运行的场景进行实际的测试,慎重调整,示例仅供参考
一般常规配置:
<Connector port="8080" address="localhost"
maxThreads="500" minSpareThreads ="50" maxHttpHeaderSize="8192"
protocol="HTTP/1.1" enableLookups="false" redirectPort="8181" acceptCount="500"
connectionTimeout="20000" maxIdleTime ="10000" disableUploadTimeout="true" />
大吞吐配置:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol" redirectPort="8181"
enableLookups="false" maxThreads="1000" minSpareThreads ="50" maxHttpHeaderSize="8192" acceptCount="1000"
connectionTimeout="20000" maxIdleTime ="10000" disableUploadTimeout="true" />
不要使用Tomcat的虚拟主机
每个站点一个实例。即启动多个Tomcat,不在1个Tomcat中部署多个应用。
禁用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭 DNS查询,方式是修改server.xml文件中的enableLookups参数值: 将其设置为false(Tomcat7.0默认为false)。
附录:常用参数说明:
connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.
maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding - 指定Tomcat容器的URL编码格式。
acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。defines the maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full are refused. The default value is 10.
disableUploadTimeout - 上传时是否使用超时机制
enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
bufferSize - defines the size (in bytes) of the buffer to be provided for input streams created by this connector. By default, buffers of 2048 bytes are provided.
maxSpareThreads - 做多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程 the maximum number of unused request processing threads that are allowed to exist until the thread pool starts stopping the unnecessary threads. The default value is 50.
maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。。 the maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200.
minSpareThreads - 最小空闲线程数,Tomcat初始化时创建的线程数 the number of request processing threads that are created when this Connector is first started. The connector will also make sure it has the specified number of idle processing threads available. This attribute should be set to a value smaller than that set for maxThreads. The default value is 4.
minProcessors - 最小空闲连接线程数,用于提高系统处理性能,默认值为10。(用于Tomcat4中)
maxProcessors - 最大连接线程数,即:并发处理的最大请求数,默认值为75。(用于Tomcat4中)
- 上一篇:Tomcat原理剖析及性能调优
- 下一篇:Tomcat Server.xml配置详解
相关推荐
- 手机看视频卡顿的系统化解决方案(手机看视频特别卡是什么原因)
-
手机看视频卡顿是日常使用中常见的问题,通常由网络不稳定、设备性能不足、应用设置不当或系统问题导致。以下方案按优先级排序,兼顾操作难度与解决效果,帮助你快速定位并解决卡顿问题。一、网络优化:解决最核心诱...
- 电子电路硬件测试基础-板级测试工具之示波器(1)
-
示波器介绍示波器,作为一种电子测试仪器,主要用于对电信号的波形进行测量、显示与分析。它的工作原理是将电信号的瞬时值转化为屏幕上的垂直偏移,并以时间为基准在水平轴上展开,进而生成信号的图形化呈现。借助示...
- 宽带安装避坑指南:从选套餐到验收全流程注意事项
-
在网络成为生活必需品的当下,看似简单的宽带安装实则暗藏诸多细节,稍不留意就会踩入隐藏费用、性能虚标等陷阱。掌握以下关键要点,助你轻松避开宽带安装雷区。一、选对运营商与套餐,拒绝隐形消费选择运营商时,不...
- 噪声分析及小信号测试(噪音中的信号是什么含义)
-
示波器在大量开关电源或大功率用电器等复杂环境下进行自环测试,容易出现视频中的噪声问题。示波器在进行小信号测试时,我们要考虑地线带来的干扰,一般设置要求是:一、带宽限制打开;二、尽可能短的地线,一般使用...
- 怀疑房间被装了监控?深度解析检测方法与步骤
-
在现代社会中,隐私保护日益受到重视。当我们租房、住酒店或身处私人住宅时,如果发现房间内有异常的迹象,如电器无故自动开关、网络速度突然变慢、电费异常增加,或者在某些特定区域总感觉“被注视”,这些都可能是...
- 如何快速鉴定网线好坏?怎样测网线电阻?
-
一、快速鉴定网线好坏的3大核心技巧1.外观检测法:5秒看穿网线本质标识验证:正品网线外皮应清晰印有"CAT5e""CAT6"等类别标识,以及米数刻度(如30...
- 网速慢?教你快速检测网卡速率! #网络测速
-
网卡是百兆还是千兆?你知道吗?网速慢可能就是因为网卡不够快,今天就来教你如何快速检查网卡。1.打开CMD:首先找到电脑,按下Win+R键,输入cmd,然后按回车,这就打开了命令提示符...
- 怎么查自己家WiFi多少兆?(苹果手机测wifi网速)
-
怎么查自己家WiFi多少兆?在数字化生活日益普及的今天,家庭WiFi的速度直接影响着我们上网冲浪、在线学习、视频通话等日常活动的流畅度。了解自家WiFi的带宽通常以兆比特每秒Mbps为...
- 家里宽带网速不理想?测一下就知道了
-
家里网络不理想,经常发生卡顿或是网络抖动?可能是家里宽带的影响,这时候不妨实际测试下网速看看,是否符合预期。个人最近经历过两次上网卡顿问题,第一个是上个月回老家,刷剧的时候,发现有加载缓慢的情况,10...
- Linux 必备的20个核心知识点(linux内核知识点)
-
学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...
- 忆享科技戟星安全实验室|内网隧道技术,你知道几个?
-
本文约6000字,阅读约需15分钟。0x00前言在实际环境中,会有各种网络设备、防火墙以及入侵检测系统阻止外网与内网的通信,我们构建内网隐蔽通道来突破安全策略的限制,实现对目标机器的控制。当我们在外...
- Win10怎么连接linux虚拟机?(win10搭建linux虚拟机)
-
这个不难,主要是ping一下ip,检查win10系统是否和Linux虚拟机连通,接着开启ssh服务,如果一切正常的话,就可以连接linux虚拟机,这里简单介绍一下实现过程,实验环境win10+vmwa...
- 如何在CentOS中配置静态IP地址?(centos6.5配置静态ip地址)
-
静态IP地址是在计算机网络中使用的固定IP地址,与动态分配的IP地址相对。在CentOS中,通过配置网络设置,您可以轻松地为您的系统设置静态IP地址。本文将详细介绍在CentOS中配置静态IP地址的步...
- Firewalld的简单使用(firewall direct)
-
从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptablesFirewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理ke...
- Vmware设置静态IP和主机访问(vmware 设置固定ip)
-
摘要:Vmware设置静态IP和主机访问关键词:Vmware、静态IP、主机访问整体说明最近在做大模型的本地部署,发现之前的Virtualbox,不太能用到本地的英伟达GPU,所以开始使用...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)