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

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内存,线程数经验值800server.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

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线程数*8server.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服务器容器调优的方法是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2603448.html

(0)
上一篇 2025年3月6日 19:40:31
下一篇 2025年2月27日 04:45:30

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Docker部署Java web系统的方法

    docker部署java web系统  1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app &&cd app 2.将apach…

    2025年3月6日
    200
  • 基于Java怎么实现Redis多级缓存

    一、多级缓存 1. 传统缓存方案 请求到达tomcat后,先去redis中获取缓存,不命中则去mysql中获取 2. 多级缓存方案 tomcat的请求并发数,是远小于redis的,因此tomcat会成为瓶颈 利用请求处理每个环节,分别添加缓…

    2025年3月6日 编程技术
    200
  • java获取到heapdump文件后怎么快速分析

    heapdump文件介绍 heap dump: heap dump文件是一个二进制文件,它保存了某一时刻jvm堆中对象使用情况。heapdump文件是指定时刻的java堆栈的快照,是一种镜像文件。 产生heap dump(内存溢出)错误原因…

    2025年3月6日 编程技术
    200
  • Java怎么实现登录与注册页面

    用java实现的登录与注册页面,实现了客户端(浏览器)到服务器(tomcat)再到后端(servlet程序)数据的交互。这里在注册页面加入了验证码验证。 注册的html代码 登录后复制登录后复制    注册页面    function ch…

    2025年3月6日
    200
  • Java如何实现鲜花商城系统

    项目介绍 该项目为前后台项目,分为普通用户与管理员两种角色,前台普通用户登录,后台管理员登录; 管理员角色包含以下功能: 管理员登录,用户管理,鲜花类别管理,鲜花管理,订单管理并发货,留言管理,系统公告管理等功能。 用户角色包含以下功能: …

    2025年3月6日 编程技术
    200
  • Java中的SPI机制是什么

    1: SPI机制简介 spi 全称是 service provider interface,是一种 jdk 内置的动态加载实现扩展点的机制,通过 spi 技术我们可以动态获取接口的实现类,不用自己来创建。这个不是什么特别的技术,只是 一种设…

    2025年3月6日
    200
  • Java语言中的医疗健康应用开发介绍

    随着医疗科技的发展和互联网的普及,医疗健康应用越来越受到人们的关注。使用java语言来开发医疗健康应用不仅可以提高开发效率,还可以保证软件的稳定性和安全性。本文将介绍java语言在医疗健康应用开发中的应用。 一、Java语言的优点 Java…

    编程技术 2025年3月6日
    200
  • Java语言应用服务器的搭建方法

    随着互联网的普及和应用开发的需要,java语言应用服务器也逐渐成为了重要的支撑平台之一。它不仅可以提供运行环境,还可以支持多种程序开发语言,如java、php和python等。本文将介绍java语言应用服务器的搭建方法,帮助广大读者快速搭建…

    编程技术 2025年3月6日
    200
  • Java语言中的社交应用开发介绍

    随着社交媒体越来越普及,社交应用也成为了人们生活中不可或缺的一部分。而随着java语言的发展,越来越多的社交应用开始使用java语言来进行开发。那么本文将从java语言的角度出发,向读者介绍java语言中的社交应用开发。 一、 Java语言…

    编程技术 2025年3月6日
    200
  • Java语言中的数据库操作技巧

    java语言中的数据库操作技巧 作为一门广泛应用于企业级开发的语言,Java语言中数据库操作是必不可少的一部分。在Java开发中使用数据库为应用程序提供数据存储和管理,而大量的数据查询和数据操作又需要高效的技巧来操作数据库。本篇文章将介绍一…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论