亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java服務器容器調優的方法是什么

發布時間:2023-05-06 10:33:01 來源:億速云 閱讀:151 作者:zzz 欄目:開發技術

這篇文章主要講解了“java服務器容器調優的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“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

感謝各位的閱讀,以上就是“java服務器容器調優的方法是什么”的內容了,經過本文的學習后,相信大家對java服務器容器調優的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红桥区| 吕梁市| 玉龙| 来安县| 逊克县| 霍林郭勒市| 扶绥县| 林州市| 金门县| 博客| 类乌齐县| 偃师市| 外汇| 句容市| 沂水县| 育儿| 阿拉善左旗| 合阳县| 黑山县| 梁山县| 天门市| 合山市| 巧家县| 湄潭县| 岐山县| 宕昌县| 阿合奇县| 宁武县| 长春市| 北辰区| 剑阁县| 柳江县| 白城市| 秭归县| 玉田县| 水富县| 浦城县| 波密县| 菏泽市| 同心县| 莱州市|