0

0

java服务器容器调优的方法是什么

WBOY

WBOY

发布时间:2023-05-11 23:37:04

|

1301人浏览过

|

来源于亿速云

转载

1.为什么要进行项目性能调优

在项目进行发布之前,需要对项目进行压力测试,可以检测出项目的性能问题,比如说:项目响应时间较慢,项目每次能解决的请求数较少,项目的瓶颈,项目查询数据时间较慢等问题,检测出来之后,就需要调优,意思就是说你的项目接口如果响应时间超过了十秒,还不做出一系列措施,那么这个项目就是有问题的,性能调优的目的就是为了使得项目更优化,rt(运行响应时间)跟小,tps(吞吐量-》每秒从数据库接收的请求量)更大等等。

一般在企业中呢会使用JMeter或者K8s,部分企业会搭建自己的压测平台,在项目写好之后对项目进行压测,在定项目的时候会对项目的响应时间做要求,对项目的请求数据做一个大概的判断,开发人员就要根据这些要求编写接口,如果接口响应时间超过了既定数据,项目支撑不了这么大的请求,就需要对项目以及项目接口进行数据库、容器、缓存等方面的调优。

2.服务容器的性能调优

2.1对SpringBoot中切入式的Tomcat调优:优化最大线程数

调优说明:

maxThreads最大线程数:衡量web服务器,同时处理任务的数量

accept-count最大等待数:队列最大能接受的等待数量。超过拒绝请求。

Max Connections最大链接数:同一时间最大的连接数量。

立即学习Java免费学习笔记(深入)”;

链接数量最大的时候还会继续请求,进入等待,超过最大等待就会拒绝。

SpringBoot中的最大线程数是200,在很多情况下最大线程数200是不够的,一般而言1cpu2G的服务器配置设置为200,4cpu8G的服务器配置设置为800,可以大大提高TPS,降低RT

调优设置

修改配置文件application.yml

# 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内存,线程数经验值800
server.tomcat.threads.max: 800 # 并发处理创建的最大的线程数量
server.tomcat.threads.min-spare: 100 # 最大空闲连接数,防止突发流量

修改配置要确认生效。

可使用SpringBoot中的配置,刚刚的配置文件中再加上

# 暴露所有的监控点
management.endpoints.web.exposure.include: '*'
# 定义Actuator访问路径
management.endpoints.web.base-path: /actuator
# 开启endpoint 关闭服务功能
management.endpoint.shutdown.enabled: true
  • 检测配置生效:ip:端口/actuator

  • 搜索tomcat

    站长俱乐部购物系统
    站长俱乐部购物系统

    功能介绍:1、模块化的程序设计,使得前台页面设计与程序设计几乎完全分离。在前台页面采用过程调用方法。在修改页面设计时只需要在相应位置调用设计好的过程就可以了。另外,这些过程还提供了不同的调用参数,以实现不同的效果;2、阅读等级功能,可以加密产品,进行收费管理;3、可以完全可视化编辑文章内容,所见即所得;4、无组件上传文件,服务器无需安装任何上传组件,无需支持FSO,即可上传文件。可限制文件上传的类

    下载

2.2网络IO模型调优

网络io即系统文件读写io,系统里边使用的是NIO(高性能,同步,非阻塞),其实已经默认嵌入NIO2(超高性能,异步,非阻塞)但是需要调用NIO2的api就可以,但是这部分呢是根据系统来的,AIO(NIO2)取决于操作系统,比如linux就支持AIO

其实AIO就是NIO的一个优化,增强对文件处理和文件系统特性的支持。系统使用AIO之后,响应时间会降低且稳定。

调优设置

直接放进项目代码里边java类,生成一个java配置类

@Configuration
    public class TomcatConfig {
        //自定义SpringBoot嵌入式Tomcat
        @Bean
        public TomcatServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new
                TomcatServletWebServerFactory() {};
            tomcat.addAdditionalTomcatConnectors(http11Nio2Connector());
            return tomcat;
        }
        //配置连接器nio2
        public Connector http11Nio2Connector() {
            Connector connector=new
                Connector("org.apache.coyote.http11.Http11Nio2Protocol");
            Http11Nio2Protocol nio2Protocol = (Http11Nio2Protocol)
                                               connector.getProtocolHandler();
            //等待队列最多允许1000个线程在队列中等待
            nio2Protocol.setAcceptCount(1000);
            // 设置最大线程数
            nio2Protocol.setMaxThreads(1000);
            // 设置最大连接数
            nio2Protocol.setMaxConnections(20000);
            //定制化keepalivetimeout,设置30秒内没有请求则服务端自动断开keepalive链接
            nio2Protocol.setKeepAliveTimeout(30000);
            //当客户端发送超过10000个请求则自动断开keepalive链接
            nio2Protocol.setMaxKeepAliveRequests(10000);
            // 请求方式
            connector.setScheme("http");
            connector.setPort(9003); //自定义的端口,与源端口9001可以共用,知识改了连接器而已
            connector.setRedirectPort(8443);
            return connector;
        }
    }
  • 检测配置生效:ip:9003/调用接口

说明:tomcat还有一种模式叫apr,自动开启aio,上边用的是另一种方式,但是一般不会通过这个来调优,这部分只是做一个初步了解,因为不是所有系统都支持AIO

2.3容器优化Tomcat升级Undertow

众所周知,SpringBoot中已经嵌入了Tomcat,但是其实SpringBoot内嵌了三种服务器:Tomcat(成熟、稳定、高性能服务器),apache开发、Jetty(轻量级,快速灵活)、Undertwo(高性能,灵活性高)。

在 Spring Boot 中,默认使用的是 Tomcat 作为内置的 Web 服务器,也可以在配置文件中进行相应的配置,选择使用 Jetty 或 Undertow。

配置操作过程:
  • 在spring-boot-starter-web排除tomcat


  org.springframework.boot
  spring-boot-starter-web
  
    
      org.springframework.boot
      spring-boot-starter-tomcat
    
  

导入其他容器的starter



  org.springframework.boot
  spring-boot-starter-undertow
  • 配置

# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接
server.undertow.threads.io: 800
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
# 默认值是IO线程数*8
server.undertow.threads.worker: 8000
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小越小,空间就被利用的越充分,不要设置太大,以免影响其他应用,合适即可
server.undertow.buffer-size: 1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
# 是否分配的直接内存(NIO直接分配的堆外内存)
server.undertow.direct-buffers: true

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

804

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

723

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

395

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

445

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16861

2023.08.03

vlookup函数使用大全
vlookup函数使用大全

本专题整合了vlookup函数相关 教程,阅读专题下面的文章了解更多详细内容。

28

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 7.7万人学习

ASP 教程
ASP 教程

共34课时 | 3万人学习

Python 教程
Python 教程

共137课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号