我的编程空间,编程开发者的网络收藏夹
学习永远不晚

性能调优之java服务器容器调优详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

性能调优之java服务器容器调优详解

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

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

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

2.服务容器的性能调优

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

调优说明:

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

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

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

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

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

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
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency

导入其他容器的starter

<!--导入undertow容器依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
  • 配置
# 设置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

3.本章总结

到此这篇关于性能调优之java服务器容器调优详解的文章就介绍到这了,更多相关java服务器容器调优内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

性能调优之java服务器容器调优详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

性能调优之java服务器容器调优详解

这篇文章主要介绍了java服务器容器调优,如果接口响应时间超过了既定数据,项目支撑不了这么大的请求,就需要对项目以及项目接口进行数据库、容器、缓存等方面的调优,文章中有详细的代码示例,需要的朋友可以参考一下
2023-05-16

PHP 微服务容器化性能调优指南

为优化容器化 php 微服务性能,执行以下步骤:镜像优化:使用多阶段构建、移交 php 可执行文件和启用 opcache。资源分配:调整内存和 cpu 限制,以防止资源不足。网络优化:启用 host 网络和 http/2,以提高通信效率。应
PHP 微服务容器化性能调优指南
2024-05-08

服务器性能调优:从入门到精通

服务器性能调优是一门重要的技术,从入门到精通需要深入了解服务器架构、系统工具和性能监控指标。
服务器性能调优:从入门到精通
2024-03-01

C++ 服务器架构的性能调优技巧

优化 c++++ 服务器架构性能的技巧:使用多线程:创建和管理线程,以并行处理请求,提高并发性。采用非阻塞 i/o:使用事件驱动模型,执行非阻塞操作,防止 i/o 瓶颈。优化内存管理:使用内存池或智能指针,减少内存分配和释放成本。避免使用全
C++ 服务器架构的性能调优技巧
2024-05-14

邮件服务器性能调优:spool命令篇

在邮件服务器性能调优中,spool命令是一个重要的工具,它可以帮助管理邮件的等待队列,从而提高邮件服务器的性能和响应速度。下面将详细介绍spool命令的相关知识及其在邮件服务器性能调优中的应用。1. spool命令的基本概念spool命
邮件服务器性能调优:spool命令篇
2024-09-28

服务器调优指南:优化性能,提升效率,让服务器更强大

本指南将提供有价值的服务器调优技巧,帮助您提高服务器性能,增强效率。
服务器调优指南:优化性能,提升效率,让服务器更强大
2024-02-07

Linux平台Docker容器化应用的性能调优实践

在Linux平台上,Docker容器化应用的性能调优实践涉及多个方面,包括Dockerfile优化、网络性能调优、资源管理、存储驱动选择以及监控和日志记录等。以下是一些关键的实践方法和策略:Dockerfile优化减少层数:合并多个RUN
Linux平台Docker容器化应用的性能调优实践
2024-10-07

PHP 应用程序性能优化中 Web 服务器配置的调优

通过调优 web 服务器配置,可以优化 php 应用程序性能,具体方法包括:调整线程池大小,优化并发请求处理;设置 keepalive 超时,平衡延迟和资源消耗;设置连接限制,防止资源耗尽;启用 gzip 压缩,减小响应大小;添加文件缓存,
PHP 应用程序性能优化中 Web 服务器配置的调优
2024-05-01

服务器调优技巧:提升服务器性能的终极指南

服务器调优是一门复杂的工作,需要考虑各种因素,如硬件配置、操作系统、应用软件等。本文将介绍服务器调优技巧,帮助您提升服务器性能。
服务器调优技巧:提升服务器性能的终极指南
2024-02-07

服务器调优优化指南:解锁服务器潜能,提升整体表现

服务器调优是一种优化和配置服务器资源的过程,旨在提高服务器性能并降低成本。本文提供了服务器调优的优化指南,旨在帮助系统管理员和系统工程师解锁设备的潜能,提高整体性能和服务质量。
服务器调优优化指南:解锁服务器潜能,提升整体表现
2024-02-07

揭开服务器调优的奥秘:释放服务器性能的秘诀

服务器调优是提高服务器性能、保障业务稳定运行的关键。本文将深入解析服务器调优的奥秘,揭示释放服务器性能的秘诀,让您轻松掌握服务器调优技巧,让服务器发挥最大潜能。
揭开服务器调优的奥秘:释放服务器性能的秘诀
2024-02-07

CentOS上搭建web服务器时的CPU性能调优技巧

在CentOS上搭建web服务器时,有一些CPU性能调优技巧可以提高服务器的性能和响应能力:1. 使用高性能的CPU调度器:默认情况下,CentOS使用的是CFQ(Completely Fair Queuing)调度器,但对于web服务器来
2023-10-10

一步一步教你服务器调优:轻松优化,提升性能,打造高效服务器

这是一篇关于服务器调优的实用指南,我们将会一步一步介绍如何优化服务器,以提升其性能,打造高效而稳定的服务器。
一步一步教你服务器调优:轻松优化,提升性能,打造高效服务器
2024-02-07

最佳实践:CentOS搭建web服务器的性能调优指南

以下是一些CentOS搭建Web服务器的性能调优指南的最佳实践:1. 使用最新的稳定版本:确保你使用的是最新的CentOS版本,并安装最新的更新和安全补丁。2. 增加硬件资源:如果可能的话,增加服务器的硬件资源,例如CPU、内存和存储空间。
2023-10-09

编程热搜

目录