您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

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

2024/4/27 22:46:39发布5次查看
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内存,线程数经验值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
<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线程数*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服务器容器调优的方法是什么的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录