最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解

 更新時間:2023年04月20日 09:14:12   作者:Recently祝祝  
這篇文章主要介紹了java服務(wù)器容器調(diào)優(yōu),如果接口響應(yīng)時間超過了既定數(shù)據(jù),項(xiàng)目支撐不了這么大的請求,就需要對項(xiàng)目以及項(xiàng)目接口進(jìn)行數(shù)據(jù)庫、容器、緩存等方面的調(diào)優(yōu),文章中有詳細(xì)的代碼示例,需要的朋友可以參考一下

1.為什么要進(jìn)行項(xiàng)目性能調(diào)優(yōu)

在項(xiàng)目進(jìn)行發(fā)布之前,需要對項(xiàng)目進(jìn)行壓力測試,可以檢測出項(xiàng)目的性能問題,比如說:項(xiàng)目響應(yīng)時間較慢,項(xiàng)目每次能解決的請求數(shù)較少,項(xiàng)目的瓶頸,項(xiàng)目查詢數(shù)據(jù)時間較慢等問題,檢測出來之后,就需要調(diào)優(yōu),意思就是說你的項(xiàng)目接口如果響應(yīng)時間超過了十秒,還不做出一系列措施,那么這個項(xiàng)目就是有問題的,性能調(diào)優(yōu)的目的就是為了使得項(xiàng)目更優(yōu)化,RT(運(yùn)行響應(yīng)時間)跟小,TPS(吞吐量-》每秒從數(shù)據(jù)庫接收的請求量)更大等等。

一般在企業(yè)中呢會使用JMeter或者K8s,部分企業(yè)會搭建自己的壓測平臺,在項(xiàng)目寫好之后對項(xiàng)目進(jìn)行壓測,在定項(xiàng)目的時候會對項(xiàng)目的響應(yīng)時間做要求,對項(xiàng)目的請求數(shù)據(jù)做一個大概的判斷,開發(fā)人員就要根據(jù)這些要求編寫接口,如果接口響應(yīng)時間超過了既定數(shù)據(jù),項(xiàng)目支撐不了這么大的請求,就需要對項(xiàng)目以及項(xiàng)目接口進(jìn)行數(shù)據(jù)庫、容器、緩存等方面的調(diào)優(yōu)。

2.服務(wù)容器的性能調(diào)優(yōu)

2.1對SpringBoot中切入式的Tomcat調(diào)優(yōu):優(yōu)化最大線程數(shù)

調(diào)優(yōu)說明:

maxThreads最大線程數(shù):衡量web服務(wù)器,同時處理任務(wù)的數(shù)量

accept-count最大等待數(shù):隊(duì)列最大能接受的等待數(shù)量。超過拒絕請求。

Max Connections最大鏈接數(shù):同一時間最大的連接數(shù)量。

當(dāng)鏈接數(shù)量最大的時候還會繼續(xù)請求,進(jìn)入等待,超過最大等待就會拒絕。

SpringBoot中的最大線程數(shù)是200,在很多情況下最大線程數(shù)200是不夠的,一般而言1cpu2G的服務(wù)器配置設(shè)置為200,4cpu8G的服務(wù)器配置設(shè)置為800,可以大大提高TPS,降低RT

調(diào)優(yōu)設(shè)置

修改配置文件application.yml

# Tomcat的 maxConnections、maxThreads、acceptCount三大配置,
#分別表示最大連接數(shù),最大線程數(shù)、最大的等待數(shù),可以通過application.yml配置文件來改變這個三個值,一個標(biāo)
#準(zhǔn)的示例如下:
server.tomcat.uri-encoding: UTF-8
# 思考問題:一臺服務(wù)器配置多少線程合適?
server.tomcat.accept-count: 1000 # 等待隊(duì)列最多允許1000個請求在隊(duì)列中等待
server.tomcat.max-connections: 20000 # 最大允許20000個鏈接被建立
## 最大工作線程數(shù),默認(rèn)200, 4核8g內(nèi)存,線程數(shù)經(jīng)驗(yàn)值800
server.tomcat.threads.max: 800 # 并發(fā)處理創(chuàng)建的最大的線程數(shù)量
server.tomcat.threads.min-spare: 100 # 最大空閑連接數(shù),防止突發(fā)流量

修改配置要確認(rèn)生效。

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

# 暴露所有的監(jiān)控點(diǎn)
management.endpoints.web.exposure.include: '*'
# 定義Actuator訪問路徑
management.endpoints.web.base-path: /actuator
# 開啟endpoint 關(guān)閉服務(wù)功能
management.endpoint.shutdown.enabled: true
  • 檢測配置生效:ip:端口/actuator
  • 搜索tomcat

2.2網(wǎng)絡(luò)IO模型調(diào)優(yōu)

網(wǎng)絡(luò)io即系統(tǒng)文件讀寫io,系統(tǒng)里邊使用的是NIO(高性能,同步,非阻塞),其實(shí)已經(jīng)默認(rèn)嵌入NIO2(超高性能,異步,非阻塞)但是需要調(diào)用NIO2的api就可以,但是這部分呢是根據(jù)系統(tǒng)來的,AIO(NIO2)取決于操作系統(tǒng),比如linux就支持AIO

其實(shí)AIO就是NIO的一個優(yōu)化,增強(qiáng)對文件處理和文件系統(tǒng)特性的支持。系統(tǒng)使用AIO之后,響應(yīng)時間會降低且穩(wěn)定。

調(diào)優(yōu)設(shè)置

直接放進(jìn)項(xiàng)目代碼里邊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();
            //等待隊(duì)列最多允許1000個線程在隊(duì)列中等待
            nio2Protocol.setAcceptCount(1000);
            // 設(shè)置最大線程數(shù)
            nio2Protocol.setMaxThreads(1000);
            // 設(shè)置最大連接數(shù)
            nio2Protocol.setMaxConnections(20000);
            //定制化keepalivetimeout,設(shè)置30秒內(nèi)沒有請求則服務(wù)端自動斷開keepalive鏈接
            nio2Protocol.setKeepAliveTimeout(30000);
            //當(dāng)客戶端發(fā)送超過10000個請求則自動斷開keepalive鏈接
            nio2Protocol.setMaxKeepAliveRequests(10000);
            // 請求方式
            connector.setScheme("http");
            connector.setPort(9003); //自定義的端口,與源端口9001可以共用,知識改了連接器而已
            connector.setRedirectPort(8443);
            return connector;
        }
    }
  • 檢測配置生效:ip:9003/調(diào)用接口

說明:tomcat還有一種模式叫apr,自動開啟aio,上邊用的是另一種方式,但是一般不會通過這個來調(diào)優(yōu),這部分只是做一個初步了解,因?yàn)椴皇撬邢到y(tǒng)都支持AIO

2.3容器優(yōu)化Tomcat升級Undertow

眾所周知,SpringBoot中已經(jīng)嵌入了Tomcat,但是其實(shí)SpringBoot內(nèi)嵌了三種服務(wù)器:Tomcat(成熟、穩(wěn)定、高性能服務(wù)器),apache開發(fā)、Jetty(輕量級,快速靈活)、Undertwo(高性能,靈活性高)。

在 Spring Boot 中,默認(rèn)使用的是 Tomcat 作為內(nèi)置的 Web 服務(wù)器,也可以在配置文件中進(jìn)行相應(yīng)的配置,選擇使用 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

導(dǎo)入其他容器的starter

<!--導(dǎo)入undertow容器依賴-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
  • 配置
# 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會負(fù)責(zé)多個連接
server.undertow.threads.io: 800
# 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請求阻塞IO操作, undertow會從這個線程池中取得線程
# 默認(rèn)值是IO線程數(shù)*8
server.undertow.threads.worker: 8000
# 以下的配置會影響buffer,這些buffer會用于服務(wù)器連接的IO操作,有點(diǎn)類似netty的池化內(nèi)存管理
# 每塊buffer的空間大小越小,空間就被利用的越充分,不要設(shè)置太大,以免影響其他應(yīng)用,合適即可
server.undertow.buffer-size: 1024
# 每個區(qū)分配的buffer數(shù)量 , 所以pool的大小是buffer-size * buffers-per-region
# 是否分配的直接內(nèi)存(NIO直接分配的堆外內(nèi)存)
server.undertow.direct-buffers: true

3.本章總結(jié)

到此這篇關(guān)于性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解的文章就介紹到這了,更多相關(guān)java服務(wù)器容器調(diào)優(yōu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 隨機(jī)生成任意組電話號碼過程解析

    Java 隨機(jī)生成任意組電話號碼過程解析

    這篇文章主要介紹了Java 隨機(jī)生成任意組電話號碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • java 內(nèi)部類(匿名類,匿名對象,靜態(tài)內(nèi)部類)詳解及實(shí)例

    java 內(nèi)部類(匿名類,匿名對象,靜態(tài)內(nèi)部類)詳解及實(shí)例

    這篇文章主要介紹了java 內(nèi)部類詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java代碼實(shí)現(xiàn)簡單酒店管理系統(tǒng)

    Java代碼實(shí)現(xiàn)簡單酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java代碼實(shí)現(xiàn)簡單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • zookeeper概述圖文詳解

    zookeeper概述圖文詳解

    今天小編就為大家分享一篇關(guān)于Zookeeper概述圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印)

    Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印)

    這篇文章主要介紹了Java在Excel中添加水印的實(shí)現(xiàn)(單一水印、平鋪水印),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java獲取Date類型的年份實(shí)例代碼

    java獲取Date類型的年份實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于java如何獲取Date類型的年份,針對java獲取Date時間的各種方式匯總,有常用的時間獲取方式,還有一些其他特殊時間獲取方式,需要的朋友可以參考下
    2024-06-06
  • 輕松掌握J(rèn)ava代理模式

    輕松掌握J(rèn)ava代理模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava代理模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java?socket實(shí)現(xiàn)局域網(wǎng)聊天

    java?socket實(shí)現(xiàn)局域網(wǎng)聊天

    這篇文章主要為大家詳細(xì)介紹了java?socket實(shí)現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot 過濾器與攔截器實(shí)例演示

    SpringBoot 過濾器與攔截器實(shí)例演示

    本文通過示例代碼給大家講解SpringBoot 過濾器與攔截器的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • java接口中的代理設(shè)計(jì)模式代碼時實(shí)踐

    java接口中的代理設(shè)計(jì)模式代碼時實(shí)踐

    這篇文章主要介紹了java接口中的代理設(shè)計(jì)模式代碼時實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論

南平市| 灵山县| 黔江区| 龙游县| 砀山县| 苍溪县| 五峰| 富锦市| 共和县| 平和县| 马龙县| 车险| 新乡市| 岳阳市| 榕江县| 稷山县| 鄯善县| 喀什市| 宁南县| 温州市| 汝阳县| 绥中县| 肥西县| 万荣县| 聂荣县| 黑水县| 荆州市| 罗源县| 宕昌县| 鹤壁市| 鄯善县| 湘乡市| 拜城县| 溧水县| 潮州市| 怀安县| 衡南县| 弥勒县| 望谟县| 大安市| 象州县|