百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

服务端优化-Tomcat调优

toyiye 2024-06-21 12:33 8 浏览 0 评论

1.写在前面

目前的java开发中,越来越多的企业,基本上都上springboot开发框架了,尤其是一些小型软件公司。

为了可以更快速的搭建开发的框架,实现项目的快速交付。毕竟原来的springmvc模式,配置确实是比较多。

在使用springboot框架后,我们在部署项目,基本上就不需要再搞一个tomcat中间件,因为springboot已经是内嵌了tomcat中间件,直接运行jar包就可以了。

那内嵌的tomcat服务,对于大部分人来说,好像一时之间,找不到tomcat的配置,该如何进行配置?

也就是说,无法进行tomcat的调优了(也有可能是,根本就没接触过调优)。

作为一个有经验的程序员,我们得修炼我们得内功心法才行,不然被别人称为菜鸟,那就很尴尬了。

那我们今天就对tomcat调优的一些内容,进行分享!!!

2.Tomcat调优

为什么对Tomcat进行调优?

基于服务器性能瓶颈分析,与服务端线程数得出结论。当前系统瓶颈主要存在与Tomcat!

查看Tomcat配置是否生效,建议开启SpringBoot的监控点

调优:嵌入式Tomcat配置

Springboot开发的服务使用内嵌的tomcat服务器来启动服务,那么tomcat配置使用的是默认配置,我们需要对tomcat配置进行一些适当的优化,让tomcat性能得以提升。

这里我们先观看springboot项目启动,默认的tomcat配置,如下图所示:

这个配置,我们该如何查看呢?这里我们可以借助 actuator 工具查看。

然后直接浏览器打开即可: http://localhost:8080/actuator/configprops

在pom.xml文件,加上下面的依赖即可

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

当然,你也可以直接进入源码查看,也是可以的。 actuator 工具是为了更直观。

以上是内嵌tomcat默认的线程数配置,这里,我们可以进行调优:

改写Tomcat相关配置,修改配置如下所示:

# Tomcat的maxConnections、maxThreads、acceptCount三大配置,分别表示最大连接数,最大线程数、最大的等待数,可以通过application.yml配置文件来改变这个三个值,一个标准的示例如下:
server.tomcat.uri-encoding= UTF-8

# 思考问题:一台服务器配置多少线程合适?
server.tomcat.accept-count= 1000 # 等待队列最多允许 1000 个请求在队列中等待
server.tomcat.max-connections= 20000 # 最大允许 20000 个链接被建立

## 最大工作线程数,默认200, 4核8g内存,线程数经验值 1000
server.tomcat.threads.max= 1000 # 并发处理创建的最大的线程数量
server.tomcat.threads.min-spare= 100 # 最大空闲连接数,防止突发流量

1)、accept-count:最大等待数

  • 当调用HTTP请求数达到tomcat的最大线程数时,还有新的请求进来,这时tomcat会将该剩余请求放到等待队列中,acceptCount就是指队列能够接受的最大等待数。默认 100 ,如果等待队列超了,新的请求就会被拒绝(connection refused)。

2)、maxThreads:最大线程数

  • 每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求。
  • 最大线程数决定了Web服务容器可以同时处理多少个请求。默认是 200 。
  • 当然最大线程数肯定建议增加越大越好。但是增加线程是有成本的,不能无限制增大。线程多不仅仅会带来线程上下文切换的成本,而且线程也需要消耗内存资源。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。
  • 线程数的经验值为: 1 核2g内存为 200 ,线程数经验值 200 ; 4 核8g内存,线程数经验值 1000 。

计算公式:

# java查看xss的值的命令
java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

# 计算最大线程数的公式:
Number of threads = (MaxProcess内存 - JVM内存 - ReservedOsMemory) / (ThreadStackSize)

系统最大可创建的线程数量=(机器本身可用内存 - (JVM分配的堆内存+JVM元数据区)) / Xss的值

明显,这里的xss的值为1024k,也就是1m

还记得xss的值嘛?

这里的xss的值调优,我们之前应该是分享过了,详情可以查看这里: JVM调优-JVM调优实践二

扩展:JVM最大创建线程数

3)、Max Connections:最大连接数

  • 最大连接数是指在同一时间,tomcat能够接受的最大连接数。如果设置为-1,则禁用Max Connections功能,不限制连接对于Java的阻塞式BIO默认值是Max Threads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中Max Threads的值。对于Java 新的NIO模式,Max Connections 默认值是 10000对于Windows上APR/native IO模式,Max Connections默认值为 8192 ,这是出于性能原因,如果配置的值不是 1024 的倍数,Max Connections的实际值将减少到 1024 的最大倍数。
  • Max Connections和accept-count关系:当连接数达到最大值Max Connections后系统会继续接收连接,但不会超过acceptCount的限制。

调优配置生效确认

查看,浏览器打开: http://localhost:8080/actuator/configprops

调优之后:性能对比

未优化性能表:

并发数/ 5s

平均响应时间(RT)

吞吐量(TPS)

错误率

200

1000

200

0

300

1464

191

0

500

2431

197

0

700

3414

198

0

1000

4891

199

0

优化后性能表:

并发数/ 5s

样本数

平均响应时间(ms)

吞吐量(TPS)

200

10000

1000

181

300

15000

1000

272

500

25000

1000

454

700

35000

1002

636

1000

50000

1001

908

1500

75000

1418

960

2000

100000

1935

973

优化之前:

未优化之前最大线程数:

优化之后:

优化之后最大线程数:

可以发现,经过优化后,程序性能提升 4 倍+;

好了,以上就是 服务端优化-Tomcat调优 的分享了。

如果觉得有收获的,帮忙 点赞、评论、收藏 一下呗!!!

转自:https://juejin.cn/post/7130909498285228040

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码