MySQL 5.6安裝完以後,每過一段時間就會莫名其妙掛掉。並且還很難啓動。非要重啓服務器,才能拉起mysql。mysql
後來分析是因爲mysql啓動後內存太高,跑一段時間就會因爲內存不足而被殺死。sql
今天分析了這個問題,緣由及結果以下。緩存
我安裝的版本是5.6.35。它默認佔用內存達400多M, 而原來使用的5.0 只有30M。服務器
最開始我嘗試調整這些參數:nosql
innodb_buffer_pool_size = 64M spa
key_buffer_size = 8Mrest
query_cache_size = 16M orm
tmp_table_size = 16M 內存
key_buffer_size = 32Mit
調整後內存是降低一點點。但仍是400M以上。
最後查出5.6默認的設置以下
performance_schema_max_table_instances 12500
table_definition_cache 1400 #打開表的緩存
table_open_cache 2000 #表定義的緩存
其中 table_open_cache 是mysql每打開一個表,都會讀入一些數據到table_open_cache 緩存中。當mysql在這個緩存中找不到相應的信息時,纔會去磁盤上直接讀取。多說一句,增長 table_open_cache ,會增長文件描述符,當把 table_open_cache 設置爲很大時,若是系統處理不了那麼多文件描述符,那麼就會出現客戶端失效,鏈接不上。
而我如今打開表的數目是63個,徹底用不了那麼多。
mysql> show status like "open%";
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Open_files | 16 |
| Open_streams | 0 |
| Open_table_definitions | 70 |
| Open_tables | 63 |
| Opened_files | 147 |
| Opened_table_definitions | 0 |
| Opened_tables | 0 |
+--------------------------+-------+
修改
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
重啓mysql
service mysqld restart
發現mysql內存降低到81M。不錯。^^
感謝連接:http://nosqldb.org/p/55ceaac5c3f8a8336f3bf727