1. 程式人生 > >tomcat伺服器莫名停止服務的原因

tomcat伺服器莫名停止服務的原因

我們初學者朋友會不會遇到這麼一個場景,就是在費了好大功夫配置好的tomcat伺服器,也連結上了mysql,但是一段時間後再連上的時候卻發現tomcat不在服務狀態,什麼沒做但是卻在tomcat的執行日誌裡面發現了報錯資訊,這個時候,不妨從以下的原因入手:

tips1:MySQL經典8小時問題

MySQL 的預設設定下,當一個連線的空閒時間超過8小時後,MySQL 就會斷開該連線,而 c3p0 連線池則以為該被斷開的連線依然有效。在這種情況下,如果客戶端程式碼向 c3p0 連線池請求連線的話,連線池就會把已經失效的連線返回給客戶端,客戶端在使用該失效連線的時候即丟擲異常。

 

這就是傳說中的 mySql 8小時問題。


解決這個問題的辦法有三種:
1. 增加 MySQL 的 wait_timeout 屬性的值。
修改 /etc/mysql/my.cnf 檔案,在 [mysqld] 節中設定:

# Set a connection to wait  8  hours in idle status.
wait_timeout 
=   86400

相關引數,紅色部分
mysql> show variables like '%timeout%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          

| 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout  | 50    |
interactive_timeout       | 28800 |
| net_read_timeout          | 30    |
| net_write_timeout        
| 60    |
| slave_net_timeout         | 3600 |
wait_timeout              | 28800 |
+--------------------------+-------+         
同一時間,這兩個引數只有一個起作用。到底是哪個引數起作用,和使用者連線時指定的連線引數相關,預設情況下是使用wait_timeout。我建議是將這兩個引數都修改,以免引起不必要的麻煩。

這兩個引數的預設值是8小時(60*60*8=28800)。

測試將這兩個引數改為0,結果出人意料,系統自動將這個值設定為28800 。

換句話說,不能將該值設定為永久。
將這2個引數設定為1年(60*60*24*365=31536000)