tomcat的运作和性能调优杂谈

基于Matlab生成并可视化多架飞机轨迹仿真(附源码) 这使我们可以轻松地对直线和恒定转弯进行建模,并具有额外的自由度,可以在直线段和曲线段之间平滑过渡。同样,空气中的物体会经历重力的影响,遵循抛物线(二次)路径。需要更多的航点来适应这些变化,但是轨迹的其余部分需要更少的点。第三个轨迹,如下所示,代表了一架速度更高的飞机。它由两个恒定的转弯组成,飞机在第二个转弯的中间减速。一旦知道(并设置了)物体穿过空间的物理路径,物体的速度作为行进距离的函数就通过三次埃尔米特插值来确定。在此示例中,学习了内部使用的插值符背后的概念,并展示了如何使用少量航点重现场景。 阅读详情

对于很多刚学习java web的同学,tomcat这个web服务器肯定不陌生。我也是在自己学了两年web后,才真正去了解一下它。以前看过不少tomcat 的性能调优,可都是些技术指标,需要硬记,所以没多久都忘记了。这两天看了一些tomcat内部工作原理的书籍,再配合性能调优的一些资料,才在大脑中算是记忆扎根。这里也推荐各位先去看看tomcat内部机制,再谈调优,才能有更好的认知和更长的记忆。

tomcat的运作

网络通信

其实不管是servlet容器还是im通信框架,在java里面,到底都是一个个socket连接、处理、释放,这一点虽然很普通,但是很多人初学者并没有注意到,可能是太过于底层,而tomcat一直都是以web服务器这样一个伟大的工程展现出来,初学者可能会在两者之间很难联系上。在这里,可能会涉及到TCP三次握手、操作系统层面的请求队列、java bio、nio等。

运作基本思路

我们从最简单的java传统io的方式来开始讲起,服务端自然要有一个serverSocket的实例,负责来自客户端的连接,accept阻塞后获得一个socke实例,这个socket其实就是一个connection。接着,读取数据报第一行的请求方法method,请求路径path,使用协议和版本以及数据报中header部分,将其封装成一个httpRequest和httpResponse。从请求路径中解析出要指定到的servlet名字,如果是静态资源的话,就根据目录获取到相应的静态文件并返回,如果是动态的,通过类加载器urlclassLoader加载用户自定义的servlet实例,然后再调用用户自定义的service方法。最后,关闭socket,结束连接。这个机制虽然有很多瑕疵,但是是整个tomcat运行的核心流程。

连接器connector和容器container

上述关于tomcat运作机制的描述,基本可以分为两个部分——连接的获取connector和请求的处理container。tomcat中,connector主要分为两个对象,即一个单线程负责客户端连接的connector和多线程处理httpProcessor。前者将连接封装成一个个socket,后者是一个对象池(也是线程池),每个线程将socket分配一个processor线程,负责封装req和resp以及调用container的invoke方法。container是一个实际的servlet容器,里面都是用户自定义的servlet,tomcat使用的容器成为catalina,而使用的connector为coyote。容器根据作用域可以分为4中模型,即engine、host、context、wrapper。主要说一下后面两个,wrapper可以简单理解为单个servelt,而context是一个java web项目。container中还涉及到管道pipeline和valve相关的内容,管道相当于调用servlet的一个流水线,valve是其流水线上的阀门,可以理解为一个个task,比如日志valve、记录http头部valve,还有最基本的valve,这个是内置且必须的,在管道调用的最后一个,这个task,就是调用servlet的service方法。

性能调优

tomcat三种协议模式

tomcat的http有三种协议模式,即bio、nio和apr。前两者很好理解,后面这个,是win os默认下的模式,这个可以简单理解为native,调用操作系统底层的c++函数库,在静态资源访问很大的网站上建议使用,效率最高。默认是bio,这种阻塞型效率往往很差,建议设置成nio。

调优参数

maxThread、maxConnection和acceptCount
前两个参数,对于网上很多人都有一些的说法,但是都没有说清具体的区别,因为在bio上,默认根本就没啥区别,但是在其他模式下不是这样。

这里写图片描述

前面说到,serversocket能获取到多少个socket,其实对应的就是maxConnetction。也就是在tomcat服务的端口上,对应上图中accept函数能够同时接收到的多少个socket,在没有处理线程的极端条件下,就是图中socket队列的最大长度。而maxThread其实是操作5,tomcat能同时启动多少个处理线程来处理已经在队列中的socket们。一般tomcat建议是使用线程池exector来控制线程数,一旦设置了线程池,maxThread就无效了。在bio默认下,maxThread和maxConnection是一样的,但是在nio上,maxConnction默认是10000,arp将会有更大值。处理线程数量会受到操作系统的限制,默认是200。
上图中,在操作系统os层面上,有两个队列,sync队列和accept队列。前者是tcp三次握手尚未完成时候的队列,当第三次握手信号ack发送到服务器时,连接就会冲sync转移到accept队列。而acceptCount,实际上,就是这个accept队列的长度。当accpt函数已经达到了maxConnetion设定的最大连接数后,意味着accpt不在获取新的socket,而是一直处于一个阻塞状态,直到连接数小于maxConnection。打个比喻,这时候的accept相当于在门口排队的人,而被accept函数获取的连接是进了门的人。当排队的数量达到了acceptCount后,意味着后面再有连接想排队都不给了(有点绝情),直接拒绝服务。

minSpareThread
上述提到tomcat的线程池maxThread,当未达到这个数值的时候,有新的socket进来,就会一直创建一个新的线程去处理。但是如果还没有任何请求的时候,线程池里面就没有线程了?当然不是,minSpareThread就是在没有请求时候,最少要保持住的最小线程数。

ConnectionTimeout和keepAliveTimeout
这两个超时时间也偶尔会让人有误解。前者是连接已经被accept获取后,但是长时间(可能才几十秒)没有收到客户端发送的fin或者数据传送过来,已经是占着茅坑不拉屎,后面还有很多人排队呢!当然要超时T出去。
keepAliveTimeout是http1.1设定的属性同一个连接,可以反复使用几次请求的情况下使用的。当第一次请求数据包发送完后,第二次数据包在这个时间段内没有到来,就out了,也可以理解为请求后多久才关闭连接,相当于给一个订单量特别大的客户服务,只要两次购物之间不超过这个时间,就给你永远保持绿色通道。但也意味着,普通连接都要等这么久,才会关闭掉。

基于STM32设计的物联网疫苗冷链物流监测系统 本设计基于物联网技术,开发了一套疫苗冷链物流环境监测系统。系统采用STM32F103C8T6作为主控芯片,集成SHT30温湿度传感器、震动传感器、GPS定位模块和4G通信模块,实现对运输环境的温度、湿度及震动状况的实时监测与控制。通过继电器驱动半导体制冷模块和加湿器,系统能够自动调节环境温湿度,保障疫苗运输的安全性。采集的环境数据通过MQTT协议上传至华为云物联网平台,配套开发的Android手机APP和Windows上位机软件基于Qt平台设计,支持远程实时查看环境数据和车辆定位,提升了疫苗冷链运输的智能化 阅读详情

相关推荐

Vivado2022.2下载安装

链接:https://pan.baidu.com/s/1lyfE2d-VmaWC-_aR8ratCQ提取码:mt09。

weixin_61081689的博客 2万+

tomcat access日志含义

打开tomcat中文件conf/server.xml,可以看到如下代码: <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory=...

qq_33337927的博客 5889

手把手教你学Simulink--基于火电发电系统的场景实例:燃煤发电机组的锅炉-汽轮机协调控制仿真

本文介绍了使用Simulink构建燃煤发电机组锅炉-汽轮机协调控制系统的仿真方法。系统包含锅炉子系统、汽轮机子系统和协调控制器三大模块,通过传递函数建模和PID控制策略实现协调控制。详细说明了从模型创建、子系统设置到控制器设计的完整流程,包括燃料供给、汽轮机模型和数据处理等关键环节。最后通过性能评估验证系统响应速度、参数稳定性和效率等指标。该仿真方法为火电系统控制策略设计和优化提供了有效工具。

MHD0815的博客 1153

【Solr现网问题】Tomcat Access审计日志走一波

Mark

来啦,老弟~ 959

HALCON 20.11实战:5步搞定工业图像异常检测(附完整代码)

本文提供了一份基于HALCON 20.11的工业图像异常检测实战指南。通过五个核心步骤——环境准备、数据预处理、模型训练、推理解析与工程化部署,详细演示了如何利用深度学习技术,仅使用正常样本快速构建并优化金属表面划痕等缺陷的检测模型,并附有完整可运行的HDevelop代码,助力工程师实现高效、智能的工业视觉质检。

weixin_29243279的博客 140

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1551

Tomcat access_log

Tomcat access_log 统计接口平均相应时间 配置:Tomcat {tomcat_path}/conf/server.xml 中关于 access_log 的输出有一端输出配置1 其中: %T 处理响应的时间,以秒为单位 %D 处理响应的时间,以毫秒为单位 统计: cat localhost_access_log.2019-02-22.txt | grep ‘/act’ |...

走在命运的左岸 1445

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程

2023最新多文明策略手游《万国觉醒内购版》最新整理Linux商业手工服务端+安卓+详细搭建教程。源码内置详细搭建教程,感兴趣可自行下载。

百创科技 1713

tomcat访问(access)日志配置、记录Post请求参数

tomcat访问日志格式配置,在config/server.xml里Host标签下加上                prefix="localhost_access_log." suffix=".txt"                pattern="%h %l %u %t "%r" [%{postdata}r] %s %{Referer}i %{User-Agen

qq_30121245的博客 3万+

保姆级教程:一步步创建 ABAP Text Table

有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4276

但是我如果真的用差速轮去控制转向 为了尽量原地旋转 转向角度精确 我应该怎么去配置左右两个轮子的速度呢

目标实现方式原地转向左右轮速度相等、方向相反精确角度用 IMU 检测 yaw 实时对齐停止判断达到目标 yaw ± 容差时立即停转控制方式状态机(idle → turning → done)推荐容差2°~3° (可根据实际调整)

qqqweiweiqq的博客 312

tomcat access log

首先是配置tomcat访问日志数据,默认情况下访问日志没有打开,配置的方式如下:     编辑 ${catalina}/conf/server.xml文件.注:${catalina}是tomcat的安装目录     把以下的注释()去掉即可。                             -->      其中 directory是产生的目录 tomcat安装${catalina

799

vue3中使用antv-S2表格(基础功能版)

表格的数值默认会渲染排序 icon, 可以配置 showDefaultHeaderActionIcon关闭。当配置为对象时,always 控制是否在子维度不足 2 个时始终展示小计,默认不展示。首先创建一个vue3+vite+ts项目,可以查看下面相关文章,只看第一条即可。可以调整行宽、列宽、列排序、单个单元格详情展示、选中某列、某行等基本功能。可以通过上面设置的SUM函数自动计算出数值,也可以自定义累加函数。配置自定义方法优先级大于配置聚合方式,即配置。1、在项目中安装(npm/pnpm都可以)

蜗牛~~ 2210

注解@RequestHeader

一、概念 二、分析

m0_46069861的博客 1161

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Tomcat调优及acceptCount、maxConnections与maxThreads参数的含义和关系

但如果盲目调大最大线程数,会造成大量的线程切换,导致吞吐量无法达到预期的值(如下图所示,设置最大线程数为2000,并用2000的虚拟用户进行压测,系统吞吐量在1700左右:由于线程数为2000,但由于大量线程之间切换,平均响应时间却超过了1s,所以导致每秒事务处理量无法到达预期。通过响应时间和线程数图可以看到,线程达到50左右后,响应时间上升的斜度开始升高,说明到达瓶颈,从tps图中可以看到,程序的并发峰值达到50tps左右,在50线程左右达到最高,而后趋于稳定;厨师的数量,比顾客的数量,肯定会少一些。

z69183787的专栏 9142

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

tomcat 的 maxThreads、acceptCount(最大线程数、最大排队数)

目录 一 accept-count 和max-threads 的介绍 二accept-count 和max-threads 的配置 2.1 max-threads如何配置 2.2accept-count 如何配置 一 accept-count 和max-threads 的介绍 server.tomcat.accept-count:tomcat 启动的线程数达到...

javaTalk 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Tomcat中Max-thread配置项对TPS的影响

但如果盲目调大最大线程数,会造成大量的线程切换,导致吞吐量无法达到预期的值(如下图所示,设置最大线程数为2000,并用2000的虚拟用户进行压测,系统吞吐量在1700左右:由于线程数为2000,但由于大量线程之间切换,平均响应时间却超过了1s,所以导致每秒事务处理量无法到达预期。通过响应时间和线程数图可以看到,线程达到50左右后,响应时间上升的斜度开始升高,说明到达瓶颈,从tps图中可以看到,程序的并发峰值达到50tps左右,在50线程左右达到最高,而后趋于稳定;厨师的数量,比顾客的数量,肯定会少一些。

z69183787的专栏 1116

tomcat的maxThreads、acceptCount,对高并发的影响

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料。

2401_84002771的博客 1829

Spring Boot中内置Tomcat最大连接数、线程数与等待数 实践调优

在 Spring Boot 框架中,我们使用最多的是Tomcat,这是 Spring Boot 默认的容器技术,而且是内嵌式的 Tomcat。Tomcat 是 Apache 基金下的一个轻量级的Servlet 容 器 , 支 持 Servlet 和 JSP。Tomcat服务器本身具有Web服务器的功能,可以作为独立的Web服务器来使用。

weixin_43958014的博客 1万+

Tomcat参数之maxThreads

Tomcat参数之maxThreadsmaxThreads参数设置方式Connector节点配置Executor节点配置 maxThreads参数设置方式 从tomcat官网可以看到,tomcat的conf/server.xml文件中有两个节点可以设置maxThreads参数,下面分别介绍 Connector节点配置 Connector配置maxThreads官网原文如下: The maximum...

HunterSu的专栏 3603

Tomcat的acceptCount、maxConnections与maxThreads参数的含义和关系

详细的介绍了Tomcat中的acceptCount、maxConnections与maxThreads参数的含义以及关系。

终生学习践行者 3670

秒懂:tomcat的maxConnections、maxThreads、acceptCount 图解

后面附图 | 秒懂 疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列 【博客园总入口 】 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一、版本1 :springcloud + zookeeper 秒杀 二、版本2 :springcloud + redis 分布式锁秒杀 三、版本3 :springclo...

架构师尼恩 6433

深度理解Tomcat的acceptCount、maxConnections、maxThreads

一、Nio、Bio、APR 1、Connector的protocol Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同,其中最典型的protocol包括BIO、NIO和APR(Tomcat7中支持这3种,Tomcat8增加了对NIO2的支持,而到了Tomcat8.5和Tomcat9.0,则去掉了对BIO的支持)。 BIO是Blo...

zzzgd_666的博客 2万+

tomcat的maxConnections、maxThreads、acceptCount

详细的来说:当调用HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。关于Java IO模式、以及IO处理的线程模型等基础的通信框架的知识,是Java程序员的重要、必备的内功,具体请参见尼恩编著的《Netty、Zookeeper、Redis高并发实战》一书,这里不做过多的赘述。官方文档的说明为:当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。......

beihenanfei的专栏 3159

配置Tomcat线程参数maxThreads、acceptCount

一、配置Tomcat/conf/server.xml修改配置&lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"        redirectPort="8443"        URIEncoding="UTF-8"        minSpareThreads="25"        m..

qq_29663071的博客 8934

tomcat最大线程数设置的依据

重要参数 maxThread:tomcat的maxThread指的是处理业务的最大线程数,位于Connector组件的层次,在springboot中由server.tomcat.max-threads参数决定,默认是200 acceptCount:当前线程数达到maxThread的时候,等待队列的最大长度,默认为100 tomcat接收请求创建线程的过程 如果当前线程数还没有达到maxThread,则创建一个线程去执行任务 如果已经达到了maxThread,但是等待列队中的任务还没有达到accpet

luzhensmart的专栏 1537
上一篇: UDP协议新认知
下一篇: java并发之加锁
@云师兄
博客等级 码龄10年 10粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值