SpringBoot優(yōu)化連接數(shù)的方法詳解
由于springboot內(nèi)置web容器是Tomcat,所以我們在使用springboot時,如果內(nèi)置Tomcat參數(shù)不滿足要求時,可按需優(yōu)化。
SpringBoot內(nèi)置Tomcat,在默認設置中,Tomcat的最大線程數(shù)是200,最大連接數(shù)是10000。支持的并發(fā)量是指連接數(shù),也就是說 支持最大并發(fā)量是一萬(默認)。
Tomcat有兩種處理連接的模式,
1,是BIO,一個線程只處理一個Socket連接,
2,是NIO,一個線程處理多個Socket連接。
由于HTTP請求不會太耗時,而且多個連接一般不會同時來消息,所以一個線程處理多個連接沒有太大問題。一個線程處理多個連接數(shù)會很慢 有可能會超時。
springboot 配置Tomcat參數(shù):
server:
tomcat:
accept-count: 80 #掛起的請求隊列最大連接數(shù),默認100
max-connections: 2000 #最大連接數(shù),默認10000,tomcat內(nèi)tcp連接池的大小
max-threads: 200 #最大線程數(shù),默認200,超過加入等待隊列,默認是100,當?shù)却犃羞_到100后,直接拒絕此次請求返回connection refused。連接超時時間默認為20秒
min-spare-threads: 5 #最小工作線程數(shù)
connection-timeout: 60000 #server端的socket超時間,默認60s
accesslog:
enabled: true #啟動tomcat訪問日志靜態(tài)內(nèi)部類Accesslog:主要用于配置Tomcat訪問日志的參數(shù)信息:
- enabled:是否啟用訪問日志
- pattern:訪問日志的格式化模式,默認為common
- directory:創(chuàng)建日志文件的目錄??梢允墙^對或相對于Tomcat的基目錄,默認是logs
- prefix:日志文件名稱前綴,默認access_log
- suffix:日志文件名稱后綴,默認.log
- rotate:是否啟用訪問日志旋轉,默認為true
- renameOnRotate:是否推遲將日期戳包含在文件名中
- fileDateFormat:日志文件名稱中的日期格式,默認為.yyyy-MM-dd。
- requestAttributesEnabled:為請求使用的IP地址、主機名、協(xié)議和端口設置請求屬性
- buffered:是否緩沖輸出,使其只定期刷新,默認為true
優(yōu)化完內(nèi)置Tomcat配置,我們可以按需再優(yōu)化下數(shù)據(jù)庫連接配置:
查詢mysql最大連接數(shù):
show variables like "%max_connections%";
MySQL 最大連接數(shù)的默認值是 100,這個數(shù)值對于并發(fā)連接很多的數(shù)據(jù)庫應用是遠不夠用的。當連接請求大于默認連接數(shù)后,就會出現(xiàn)無法連接數(shù)據(jù)庫的錯誤,因此我們需要把它適當調(diào)大一些。在使用 MySQL 數(shù)據(jù)庫的時候,經(jīng)常會遇到一個問題,就是 “Can not connect to MySQL server. Too many connections” -mysql 1040 錯誤,這是因為訪問 MySQL 且還未釋放的連接數(shù)已經(jīng)達到 MySQL 的上限。通常,MySQL 的最大連接數(shù)默認是 100,,最大可以達到 16384。
常用的修改MySQL最大連接數(shù)的兩種方式如下:
第一種:命令行修改最大連接數(shù) (max_connections),設置最大連接數(shù)為 1000。
set global max_connections = 1000;
這種方式有個問題,就是設置的最大連接數(shù)只在 MySQL 當前服務進程有效,一旦 MySQL 重啟,又會恢復到初始狀態(tài)。因為 MySQL 啟動后的初始化工作是從其配置文件中讀取數(shù)據(jù)的,而這種方式?jīng)]有對其配置文件做更改。
第二種:通過修改配置文件來修改 MySQL 最大連接數(shù) (max_connections)。
進入 MySQL 安裝目錄,打開 MySQL 配置文件 my.ini 或 my.cnf 查找 max_connections=100,修改為 max_connections=1000,重啟 MySQL 服務即可。
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
總結
到此這篇關于SpringBoot優(yōu)化連接數(shù)的文章就介紹到這了,更多相關SpringBoot優(yōu)化連接數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JAVA下單接口優(yōu)化實戰(zhàn)TPS性能提高10倍
今天小編就為大家分享一篇關于JAVA下單接口優(yōu)化實戰(zhàn)TPS性能提高10倍,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析
這篇文章主要介紹了JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析,需要的朋友可以參考下2014-10-10
Java基于解釋器模式實現(xiàn)定義一種簡單的語言功能示例
這篇文章主要介紹了Java基于解釋器模式實現(xiàn)定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關實現(xiàn)與使用技巧,需要的朋友可以參考下2018-05-05

