mysql的大量的sleep進程解決辦法


mysql的大量的sleep進程解決辦法

 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/liuyong0507/article/details/74931062

公司有一台Linux服務器專門用來跑公司的WEB服務,由於歷史原因,站點數與頁面非常多,導致經常出現大量的sleep進程;MySQL服務器所支持的最大連接數是有上限的,因為每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作后,應該斷開連接並釋放占用的內存。如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間后,可以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。

 Mysql> show variables like “%timeout%”;

+-----------------------------+----------+
| Variable_name              | Value    |
+-----------------------------+----------+
| connect_timeout            | 10      | 
| delayed_insert_timeout      | 300      | 
| innodb_flush_log_at_timeout | 1        | 
| innodb_lock_wait_timeout    | 50      | 
| innodb_rollback_on_timeout  | OFF      | 
| interactive_timeout        | 28800    | 
| lock_wait_timeout          | 31536000 | 
| net_read_timeout            | 30      | 
| net_write_timeout          | 60      | 
| slave_net_timeout          | 3600    | 
| wait_timeout                | 28800    | 
+-----------------------------+----------+
11 rows in set (0.00 sec)

經查詢發現原來mysql沒有進行過優化,還是原來的默認值:28800(即8個小時)

編輯 /etc/my.cnf,在mysqld 下 新增 timeout參數,設置為120秒,如下:

【mysqld】
wait_timeout=120
interactive_timeout=120

注意:要同時設置interactive_timeout和wait_timeout才會生效。

最后重啟一下mysql 生效 即可!

 

當然你也可以寫shell腳本去控制,但是不僅建議這么操作!


免責聲明!

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



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