MySQLNonTransientConnectionException資料庫連線異常
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Data source rejected establishment of connection, message from server:"Too many connections"
今天在新搭建的HDP平臺上提交Spark程式過程中,在Yarn後臺檢視了Job日誌後報出的該問題,當時分析有以下幾個方面的原因:
- 資料庫驅動jar版本過低
- 資料庫安裝之後預設最大連線數太少
- Spark程式碼中配置的資料庫連線池初始化連線數量過少
- Spark程式碼中獲取的資料庫連線使用完畢後未進行釋放,導致連線資源不足
該報錯出來之後首先分析了這幾點原因,最開始就排除了第一個可能性,因為我們的資料庫驅動版本是公司規定的()資料庫版本是MySQL5.7,其他的Spark程式跑的都很穩定,沒有理由在新搭建的HDP環境中Spark程式跑不起來,另外將該平臺的Spark任務在老的HDP環境中執行是沒有任何問題的,所以排除了3,4問題。那麼最有可能的就是資料庫安裝之後的預設最大連線數了。
其實在搭建環境的過程中,安裝MySQL資料庫的時候確實沒有注意到預設初始化最大連線數為多少,但是我們在Spark程式碼中配置的連線池的最小連線數量是30,最大連線數量為300 ;然後就登入到MySQL資料庫後臺檢視當前配置的資料庫最大連線數量 :
- 檢視資料庫當前連線數、ip、使用者、連線數量、連線狀態、連線時長
SHOW FULL processlist;
2. 檢視資料庫配置的最大連線數
show variables like '%max_connections%';
這裡可以看出來,剛剛安裝的資料庫預設的最大連線數量為151個,如果一旦超出這個數量就會導致Spark任務報錯,從而導致任務失敗。
- 修改資料庫最大連線數
在/etc/my.cnf配置檔案中修改資料庫的最大連線數
vi /etc/my.cnf
在mysqlId中新增以下配置
max_connections=3000
儲存後重啟mysql服務
systemctl restart mysqld
重新登入mysql後臺檢視當前的資料庫最大連線數量
show variables like '%max_connections%';
可以看見資料修改為了3000,最後又提交了一此Spark任務,完美執行~~
最後:寫這個部落格是為了記錄下在工作過程中遇到的一些問題,如果有遇到相同問題的小夥伴,也需要注意嘍,同樣也給自己敲了警鐘,做事情一定要認真對待~
相關文章
- DataIntegrityViolationException異常:java利用mymatis連線資料庫異常AIExceptionJava資料庫
- 資料庫連線異常處理思路資料庫
- 資料庫連線異常故障報告資料庫
- 解決Access連線 accdb 不可識別的資料庫格式異常資料庫
- TR2021_0000偶發資料庫連線異常問題排查資料庫
- druid連線池常見異常UI
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- SpringBoot專案使用yml檔案連結資料庫異常Spring Boot資料庫
- 連線資料庫資料庫
- PostgreSQL 連線 超時異常SQL
- milvus 異常——無法連線
- 第50問:從連線判斷應用訪問資料庫的異常行為資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- JDBC連線資料庫JDBC資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- JSP連線資料庫JS資料庫
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 某客戶系統tomcat連線池連線異常Tomcat
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- echart折線圖異常多出一條連線線
- 資料庫異常智慧分析與診斷資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- Flask資料庫連線池Flask資料庫
- IDEA中資料庫連線Idea資料庫
- jmeter 連線 sqlserver 資料庫JMeterSQLServer資料庫
- Datagrip連線Kingbase資料庫資料庫
- Mybatis配置資料庫連線MyBatis資料庫
- python資料庫連線池Python資料庫
- nodejs之資料庫連線NodeJS資料庫
- Rust 連線 PostgreSQL 資料庫RustSQL資料庫
- 使用Python連線資料庫Python資料庫
- django | 連線mysql資料庫DjangoMySql資料庫