com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 數據庫報錯


-- 查詢mysql 數據庫鏈接空閑時間持有最大空閑時間,單位為秒

SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout';

 

-- 會出現wait_timeout與該參數意思相近,修改時,一起修改

SHOW VARIABLES WHERE VAriable_name = '%timeout';

 

-- 解決問題

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Caused by: org.hibernate.TransactionException: JDBC commit failed
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:130)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:657)
... 29 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown.

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

-- 注意點

(1) 碰到這樣的問題,先確定是否事務的開啟后空閑時間太長導致事務的鏈接被回收掉了,只要你對數據庫進行操作,就不算閑置,不會出現這個問題

(2) 網絡出現問題,導致數據庫無法鏈接

(3) 

 

 

-- linux 系統查詢文件中字符串所在文件行數

grep -A 10 -B 5 "查詢數據字符串" catalina.out.2015-10-14.log |more

grep -rn "查詢字符串" 文件名稱

-- p表示行,不能省去

sed -n '起始行, 結束行p' catalina.out.2015-10-14.log

 

-- 進一步獲取信息,可能是由於tomcat的catalina.out 日志文件過大,而服務器進行刪除該日志的時候,導致tomcat卡住,使得tomcat獲取到的connection被mysql服務器釋放掉了,導致問題

-- tomcat解決大日志切分的方式

 

========================================================================================================================

解決方案1:(推薦使用)

(1) linux 中 配置 logrotate 進行日志記錄並切分,好處在於可以轉儲並壓縮日志

如果配置待研究,相信很快就能給出配置方式,請大家稍作等待,或自己有興趣的也可以查閱一下資料自己進行研究

參考配置地址:http://blog.csdn.net/wanglipo/article/details/6934926

=========================================================== 實現 ========================================================== 

解決方案2:

(1) 將tomcat下的大數據日志文件重新命名

(2) 在tomcat下日志文件下新創建一個相同記錄日志文件名的空文件

(3) 移走tomcat下的大數據文件,移到tomcat外的其他的路徑下

(4) 刪除移到外部的日志文件

該方案解決了直接刪除tomcat的日志大文件時鎖定tomcat的線程問題,這樣就可以解決刪除時導致事務的獲取鏈接時間超時問題

自動實現腳本執行

 

解決方案3:

系統上減少一些不必要的日志打印,減少服務器上的catalina.out文件的大小,加快服務器刪除文件的時間,后面使用日志強制重新寫入文件即可,問題引起原因就是日志文件過大,導致清理時時間過程,項目的訪問受到影響導致

 

===========================================================轉載blog========================================================

解決方案4:

解決Linux下Tomcat日志目錄下的catalina.log日志文件過大的問題

由於Tomcat在默認情況下會將沒有經過配置的web應用所產生的日志輸出已經其本身的日志內容都輸出到這個文件中,那么隨着時間的推移,這個文件的尺寸將會越來越大,當需要檢查日志內容時間會導致文件難以打開,而且同時tomcat依舊在不斷的向文件中輸入內容,這也會降低tomcat的性能。下面利用一個工具來將tomcat產生的catalina.out文件根據日期來分割,將每天產生的日志存放在一個獨立的文件中,這樣單個log文件就不會太大,而且過期的日志文件可以根據情況在不需要的時間刪除掉,或者備份到其他地方。

這里需要一個工具叫cronolog,這個工具的作用是將標准輸出中的內容重定向到文件,但是可以根據規則對文件命名,這樣我們就可以將標准輸出中的內容重定向到根據日期命名的log文件中了,然后只要將tomcat的日志輸出指向標准輸出就可以搞定問題了。下面是具體配置步驟

一、獲取與安裝cronolog工具

1. 到這里(http://cronolog.org/download/index.html)下載最新版本,本文編寫時的最新版本是1.6.2版本。

2. 將下載好的文件解壓縮,tar xvzf cronolog.tar.gz

3. 切換到解壓縮之后的cronolog目錄中

4. 初始化和編譯安裝

./configure --prefix=/usr/local/cronolog (這里--prefix后面的路徑是你希望該工具的安裝目標路徑)

./make

./make install

 

二、修改tomcat的啟動文件(tomcat/bin/catalina.sh)

1. 找到文件中的如下內容(注意:有兩處)

 

org.apache.catalina.startup.Bootstrap "$@" start /
>> "$CATALINA_BASE"/logs/catalina.out 2&1 &


將其修改成如下格式:

 

org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &

2. 注釋如下內容

 

#touch "CATALINA_BASE"/logs/catalina.out

 

然后重新啟動tomcat就可以完成任務了

原地址:http://www.cnblogs.com/yjhrem/articles/3147686.html

 

# 在前面基礎上需要修改的地方

2、修改catalina.sh 
注釋  第372行 ,結果為 # touch "$CATALINA_OUT" 
修改第393,394行,更改的結果為 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null & 

 附加查看vim文件下的行數命令

:set nu 

可查看行數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM