当前位置: 首页 > news >正文

Jvisualvm监控Tomcat以及相关参数优化

Tomcat阻塞模式

阻塞模式(BIO) 客户端和服务器创建一个连接,它就会创建一个线程来处理这个连接,以为这客户端创建了几个连接,服务端就需要创建几个线程来处理你,导致线程会产生很多,有很多线程也处于休眠状态
非阻塞模式(NIO)
在这里插入图片描述
阻塞模式: Acceptor建立一个连接,并接收客户端发过来的请求,当Acceptor接收这个连接带给Worker来处理 ,如果Worker没处理完,Acceptor也只能等待,直到任务完成。
非阻塞模式:中间加了个Poller,多了个容器,Acceptor建立一个连接,并接收客户端发过来的请求之后,并没有给Worker,而是放在Poller容器里,给了之后Acceptor不会等待,继续完成其他任务,如果Worker太忙了会开启多个线程去处理,有可能1个Acceptor对应多个Worker

Tomcat Server Status

在conf/tomcat-users.xml里配置账号,方可访问
在这里插入图片描述

maxThreads 修改最大连接数

maxThreads:tomcat接收客户端请求的最大线程数,也就是同时处理任务的个数,它的默认大小为200,一般来说,在高并发的I/O密集型应用中,这个值设置为1000左右比较合理(前提是机器配置高)

 <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" maxThreads="20" />

在这里插入图片描述
tomcat最高线程数设置了20,jmeter压力配置的线程数200,如下图,20个线程几乎都是绿色运行中状态,说明线程很忙,需要增加tomcat最高线程数,如果线程数配置过高,上下切换也是很消耗资源的,所以需要合理配置tomcat最高线程数。
在这里插入图片描述

maxConnections

这个参数是指同一时间,tomcat能够接受的最大连接数,对于java新的NIO模式,maxConnections默认值是10000,所以这个参数我们一般保持不变。
例如:jmeter开启2000线程压服务器,服务器端开启200哥线程处理客户端的请求,假设开启的连接数是2000,maxconnections=200,代表另外1800直接拒绝,都不需要等待,一般设置会比较大,有可能响应时间比较慢,但不会被拒绝。

acceptCount

当线程数量达到上面设置的值,所能接受的最大排队数量,超过这个值,请求就会被拒绝,一般和maxThreads设置成一样大。
server.xml

 <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" maxThreads="20" acceptCount="30" />

当acceptCount=30,意思是超过30个排队的线程,就直接拒掉
maxThreads设置20,jmeter线程200,如下图
在这里插入图片描述
怎么判断最大线程池够不够用,maxThreads
场景一、jmeter压测线程设置1,maxThreads设置20
线程监控结果:
在这里插入图片描述
jvisualvm的thread监控图是每秒刷新一次,其中橙色代表TIMED_WAITING状态,没活儿干,绿色代表RUNNABLE状态,在干活
通过这个测试结果,你可以看到,在只有一个压力线程的情况下,这10个Worker是轮流提供响应的,典型的线程足够用的状态。
场景二、当压力线程数通过递增,慢慢超过服务端线程数时。
在这里插入图片描述
在这里插入图片描述
在这个场景中,特意把压力工具中的线程数设置得高于Tomcat线程数,并且通过递增的方式加压。
一开始线程数时足够用的,还有挺多的时间处于空闲状态,但随着压力的增加,Tomcat的线程越来越忙,直到不够用,于是Tomcat就自己调增了线程数,知道maxThreads的值,然后线程的空闲状态越来越小,到最后几乎没有空闲状态。
可以看到响应时间随着线程数的不够用而不断的增加。
这是典型的线程配置不够的状态。

常见瓶颈:

压力不断增大,服务器资源利用率一直保持很低(压力上不去),响应时间变长,吞吐量趋于稳定,并且有下降趋势。
排查:首先排查中间件(tomcat)线程使用情况

相关文章:

Jvisualvm监控Tomcat以及相关参数优化

Tomcat阻塞模式 阻塞模式&#xff08;BIO&#xff09; 客户端和服务器创建一个连接&#xff0c;它就会创建一个线程来处理这个连接&#xff0c;以为这客户端创建了几个连接&#xff0c;服务端就需要创建几个线程来处理你&#xff0c;导致线程会产生很多&#xff0c;有很多线程…...

界面组件DevExpress WinForms v22.2 - 全面升级数据展示功能

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…...

正点原子第一期

ZYNQ是一个fpga用来硬件编程&#xff0c;外加一个软件编程 FPGA是可通过编程来修改其逻辑功能的数字集成电路 第三篇语法篇 第七章 verilog HDL语法 Verilog的简介 可编程逻辑电路&#xff1a;允许用户自行修改内部连接的集成电路&#xff0c;其内部的电路结构可以通过编程数…...

「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC

「mysql是怎样运行的」第24章 一条记录的多幅面孔—事务的隔离级别与MVCC 文章目录「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC一、事前准备二、事务的隔离级别事务并发执行遇到的问题SQL标准中的四种隔离级别MySQL中支持的四种隔离级别三、MVCC原…...

入门Java第十五天 线程

一、多线程 1.1进程和线程 进程&#xff1a;进程就是操作系统中运行的每一个应用程序。例如&#xff1a;微信&#xff0c;QQ 线程&#xff1a;线程是进程中的每一个任务。 多线程&#xff1a;在一个进程中&#xff0c;可以同时执行多个线程。同时完成多个任务。 并发&#x…...

探索用卷积神经网络实现MNIST数据集分类

问题对比单个全连接网络&#xff0c;在卷积神经网络层的加持下&#xff0c;初始时&#xff0c;整个神经网络模型的性能是否会更好。方法模型设计两层卷积神经网络&#xff08;包含池化层&#xff09;&#xff0c;一层全连接网络。选择 5 x 5 的卷积核&#xff0c;输入通道为 1&…...

MySQL 索引失效场景

1&#xff0c;前言 索引主要是为了提高表的查询速率&#xff0c;但在某些情况下&#xff0c;索引也会失效的情况。 2&#xff0c;失效场景 2.1 最左前缀法则 查询从索引最左列开始&#xff0c;如果跳过索引中的age列&#xff0c;那么age后面字段的索引都将失效&#xff0c;…...

Xcode开发工具,图片放入ios工程

Xcode开发工具&#xff0c;图片放入ios工程&#xff0c;有三种方式&#xff1a; 一&#xff1a;Assets Assets.xcassets 一般是以蓝色的Assets.xcassets的文件夹形式在工程中&#xff0c;以Image Set的形式管理。当一组图片放入的时候同时会生成描述文件Contents.jso…...

操作系统权限提升(十九)之Linux提权-SUID提权

系列文章 操作系统权限提升(十八)之Linux提权-内核提权 SUID提权 SUID介绍 SUID是一种特殊权限&#xff0c;设置了suid的程序文件&#xff0c;在用户执行该程序时&#xff0c;用户的权限是该程序文件属主的权限&#xff0c;例如程序文件的属主是root&#xff0c;那么执行该…...

直播 | StarRocks 实战系列第三期--StarRocks 运维的那些事

2023 年开春&#xff0c; StarRocks 社区重磅推出入门级实战系列直播&#xff0c;手把手带你从 Zero to Hero 成为一个 “StarRocks Pro”&#xff01;通过实际操作和应用场景的结合&#xff0c;我们将帮你系统性地学习 StarRocks 这个当今最热门的开源 OLAP 数据库。本次&…...

KingabseES执行计划-分区剪枝(partition pruning)

概述 分区修剪(Partition Pruning)是分区表性能的查询优化技术 。在分区修剪中&#xff0c;优化器分析SQL语句中的FROM和WHERE子句&#xff0c;以在构建分区访问列表时消除不需要的分区。此功能使数据库只能在与SQL语句相关的分区上执行操作。 参数 enable_partition_pruning 设…...

Operator-sdk 在 KaiwuDB 容器云中的使用

一、使用背景KaiwuDB Operator 是一个自动运维部署工具&#xff0c;可以在 Kubernetes 环境上部署 KaiwuDB集群&#xff0c;借助 Operator 可实现无缝运行在公有云厂商提供的 Kubernetes 平台上&#xff0c;让 KaiwuDB 成为真正的 Cloud-Native 数据库。使用传统的自动化工具会…...

【数据挖掘】2、数据预处理

文章目录一、数据预处理的意义1.1 缺失数据1.1.1 原因1.1.2 方案1.1.3 离群点分析1.2 重复数据1.2.1 原因1.2.2 去重的方案1.3 数据转换1.4 数据描述二、数据预处理方法2.1 特征选择 Feature Selection2.2 特征提取 Feature Extraction2.2.1 PCA 主成分分析2.2.2 LDA 线性判别分…...

(四十六)大白话在数据库里,哪些操作会导致在表级别加锁呢?

之前我们已经给大家讲解了数据库里的行锁的概念&#xff0c;其实还是比较简单&#xff0c;容易理解的&#xff0c;因为在讲解锁这个概念之前&#xff0c;对于多事务并发以及隔离&#xff0c;我们已经深入讲解过了&#xff0c;所以大家应该很容易在脑子里有一个多事务并发执行的…...

【Android源码面试宝典】MMKV从使用到原理分析(二)

上一章节,我们从使用入手,进行了MMKV的简单讲解,我们通过分析简单的运行时日志,从中大概猜到了一些MMKV的代码内部流程,同时,我们也提出了若干的疑问?还是那句话,带着目标(问题)去阅读一篇源码,那么往往收获的知识,更加深入&扎实。 本节,我们一起来从源码层次…...

如何使用ADFSRelay分析和研究针对ADFS的NTLM中继攻击

关于ADFSRelay ADFSRelay是一款功能强大的概念验证工具&#xff0c;可以帮助广大研究人员分析和研究针对ADFS的NTLM中继攻击。 ADFSRelay这款工具由NTLMParse和ADFSRelay这两个实用程序组成。其中&#xff0c;NTLMParse用于解码base64编码的NTLM消息&#xff0c;并打印有关消…...

【Python学习笔记】第二十二节 Python XML 解析

一、什么是XMLXML即ExtentsibleMarkup Language(可扩展标记语言)&#xff0c;是用来定义其它语言的一种元语言。XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则&#xff0c;它没有标签集(tagset)&#xff0c;也没有语法规则(grammatical rule)。任何XML文档对任何…...

5分钟轻松拿下Java枚举

文章目录一、枚举(Enum)1.1 枚举概述1.2 定义枚举类型1.2.1 静态常量案例1.2.2 枚举案例1.2.3 枚举与switch1.3 枚举的用法1.3.1 枚举类的成员1.3.2 枚举类的构造方法1&#xff09;枚举的无参构造方法2&#xff09;枚举的有参构造方法1.3.3 枚举中的抽象方法1.4 Enum 类1.4.1 E…...

华为OD机试【独家】提供C语言题解 - 最小传递延迟

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明最小…...

【Web前端】关于JS数组方法的一些理解

一、具备栈特性的方法unshift(...items: T[]) : number将一个或多个元素添加到数组的开头&#xff0c;并返回该数组的新长度。shift(): T | undefined从数组中删除第一个元素&#xff0c;并返回该元素的值。此方法更改数组的长度。二、具备队列特性的方法push(...items: T[]): …...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...