標籤:restart 描述符 nbsp schema stream class mysql 5.6 直接 tmp
MySQL 5.6安裝完之後,每過一段時間就會莫名其妙掛掉。而且還很難啟動。非要重啟伺服器,才能拉起mysql。
後來分析是由於mysql啟動後記憶體過高,跑一段時間就會由於記憶體不足而被殺死。
今天分析了這個問題,原因及結果如下。
我安裝的版本是5.6.35。它預設佔用記憶體達400多M, 而原來使用的5.0 只有30M。
最開始我嘗試調整這些參數:
innodb_buffer_pool_size = 64M
key_buffer_size = 8M
query_cache_size = 16M
tmp_table_size = 16M
key_buffer_size = 32M
調整後記憶體是下降一點點。但還是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
mysql_5.6記憶體過高問題解決