SpringBoot優(yōu)化連接數(shù)的方法詳解
由于springboot內(nèi)置web容器是Tomcat,所以我們在使用springboot時,如果內(nèi)置Tomcat參數(shù)不滿足要求時,可按需優(yōu)化。
SpringBoot內(nèi)置Tomcat,在默認(rèn)設(shè)置中,Tomcat的最大線程數(shù)是200,最大連接數(shù)是10000。支持的并發(fā)量是指連接數(shù),也就是說 支持最大并發(fā)量是一萬(默認(rèn))。
Tomcat有兩種處理連接的模式,
1,是BIO,一個線程只處理一個Socket連接,
2,是NIO,一個線程處理多個Socket連接。
由于HTTP請求不會太耗時,而且多個連接一般不會同時來消息,所以一個線程處理多個連接沒有太大問題。一個線程處理多個連接數(shù)會很慢 有可能會超時。
springboot 配置Tomcat參數(shù):
server: tomcat: accept-count: 80 #掛起的請求隊(duì)列最大連接數(shù),默認(rèn)100 max-connections: 2000 #最大連接數(shù),默認(rèn)10000,tomcat內(nèi)tcp連接池的大小 max-threads: 200 #最大線程數(shù),默認(rèn)200,超過加入等待隊(duì)列,默認(rèn)是100,當(dāng)?shù)却?duì)列達(dá)到100后,直接拒絕此次請求返回connection refused。連接超時時間默認(rèn)為20秒 min-spare-threads: 5 #最小工作線程數(shù) connection-timeout: 60000 #server端的socket超時間,默認(rèn)60s accesslog: enabled: true #啟動tomcat訪問日志
靜態(tài)內(nèi)部類Accesslog:主要用于配置Tomcat訪問日志的參數(shù)信息:
- enabled:是否啟用訪問日志
- pattern:訪問日志的格式化模式,默認(rèn)為common
- directory:創(chuàng)建日志文件的目錄。可以是絕對或相對于Tomcat的基目錄,默認(rèn)是logs
- prefix:日志文件名稱前綴,默認(rèn)access_log
- suffix:日志文件名稱后綴,默認(rèn).log
- rotate:是否啟用訪問日志旋轉(zhuǎn),默認(rèn)為true
- renameOnRotate:是否推遲將日期戳包含在文件名中
- fileDateFormat:日志文件名稱中的日期格式,默認(rèn)為.yyyy-MM-dd。
- requestAttributesEnabled:為請求使用的IP地址、主機(jī)名、協(xié)議和端口設(shè)置請求屬性
- buffered:是否緩沖輸出,使其只定期刷新,默認(rèn)為true
優(yōu)化完內(nèi)置Tomcat配置,我們可以按需再優(yōu)化下數(shù)據(jù)庫連接配置:
查詢mysql最大連接數(shù):
show variables like "%max_connections%";
MySQL 最大連接數(shù)的默認(rèn)值是 100,這個數(shù)值對于并發(fā)連接很多的數(shù)據(jù)庫應(yīng)用是遠(yuǎn)不夠用的。當(dāng)連接請求大于默認(rèn)連接數(shù)后,就會出現(xiàn)無法連接數(shù)據(jù)庫的錯誤,因此我們需要把它適當(dāng)調(diào)大一些。在使用 MySQL 數(shù)據(jù)庫的時候,經(jīng)常會遇到一個問題,就是 “Can not connect to MySQL server. Too many connections” -mysql 1040 錯誤,這是因?yàn)樵L問 MySQL 且還未釋放的連接數(shù)已經(jīng)達(dá)到 MySQL 的上限。通常,MySQL 的最大連接數(shù)默認(rèn)是 100,,最大可以達(dá)到 16384。
常用的修改MySQL最大連接數(shù)的兩種方式如下:
第一種:命令行修改最大連接數(shù) (max_connections),設(shè)置最大連接數(shù)為 1000。
set global max_connections = 1000;
這種方式有個問題,就是設(shè)置的最大連接數(shù)只在 MySQL 當(dāng)前服務(wù)進(jìn)程有效,一旦 MySQL 重啟,又會恢復(fù)到初始狀態(tài)。因?yàn)?MySQL 啟動后的初始化工作是從其配置文件中讀取數(shù)據(jù)的,而這種方式?jīng)]有對其配置文件做更改。
第二種:通過修改配置文件來修改 MySQL 最大連接數(shù) (max_connections)。
進(jìn)入 MySQL 安裝目錄,打開 MySQL 配置文件 my.ini 或 my.cnf 查找 max_connections=100,修改為 max_connections=1000,重啟 MySQL 服務(wù)即可。
mybatis 的并發(fā)上限優(yōu)化:
spring.datasource.name=druidDataSource spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://192.168.1.1:13306/test?useUnicode=true&characterEncoding=utf8&useTimezone=true&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=123456test spring.datasource.filters=stat,wall,log4j,config spring.datasource.max-active=100 spring.datasource.initial-size=1 spring.datasource.max-wait= 60000 spring.datasource.min-idle=1 spring.datasource.time-between-eviction-runs-millis=60000 spring.datasource.min-evictable-idle-time-millis=300000 spring.datasource.validation-query=select 'x' spring.datasource.test-while-idle=true spring.datasource.test-on-borrow=false spring.datasource.test-on-return=false spring.datasource.pool-prepared-statements=true spring.datasource.max-open-prepared-statements=50 spring.datasource.max-pool-prepared-statement-per-connection-size=20
總結(jié)
到此這篇關(guān)于SpringBoot優(yōu)化連接數(shù)的文章就介紹到這了,更多相關(guān)SpringBoot優(yōu)化連接數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatisPlus分頁時排序的實(shí)現(xiàn)
本文主要介紹了MyBatisPlus分頁時排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03JAVA下單接口優(yōu)化實(shí)戰(zhàn)TPS性能提高10倍
今天小編就為大家分享一篇關(guān)于JAVA下單接口優(yōu)化實(shí)戰(zhàn)TPS性能提高10倍,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析
這篇文章主要介紹了JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析,需要的朋友可以參考下2014-10-10Java基于解釋器模式實(shí)現(xiàn)定義一種簡單的語言功能示例
這篇文章主要介紹了Java基于解釋器模式實(shí)現(xiàn)定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-05-05Java倒計(jì)時三種實(shí)現(xiàn)方式代碼實(shí)例
這篇文章主要介紹了Java倒計(jì)時三種實(shí)現(xiàn)方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07spring boot 默認(rèn)異常處理的實(shí)現(xiàn)
這篇文章主要介紹了spring boot 默認(rèn)異常處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04