現(xiàn)象是線上環(huán)境某個(gè)服務(wù)的接口突然開始阻塞超時(shí)。
日志里可以看出是這個(gè)服務(wù)的連接池
###不能獲得鏈接,排隊(duì)超時(shí)
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
查了下這個(gè)有很多原因,但是如果是已經(jīng)正常運(yùn)行的代碼突然出現(xiàn)這種問題。
并且數(shù)據(jù)庫(kù)本身的連接數(shù)并沒有什么大的波動(dòng)。
并且沒有慢SQL
使用同數(shù)據(jù)庫(kù)的其他項(xiàng)目也都正常。
甚至同樣代碼的其他節(jié)點(diǎn)也正常。
部署項(xiàng)目的的服務(wù)器各項(xiàng)指標(biāo)也正常。
甚至有可能這個(gè)服務(wù)本身,過會(huì)自己就好了。
出現(xiàn)類似癥狀的同學(xué)們,可以考慮排查下近期上線的代碼,是否有在事務(wù)范圍內(nèi),寫了其他與數(shù)據(jù)庫(kù)無(wú)關(guān)的耗時(shí)操作。
比如在spring項(xiàng)目中@Transactional注解的方法里寫了類似遠(yuǎn)程調(diào)用之類可能會(huì)阻塞的東西。