Mysql
MySQL 伺服器消耗太多記憶體
目前我發生了以下情況:
和 :
當我執行查詢時,我得到大約 68 個條目,其中大部分時間設置為 0
show full processlist;
- 我做錯了什麼?
- 我如何釋放一些記憶體?
- 像這樣凍結交換是否正常?我試圖修改swappiness但沒有成功。
迴聲 10 > /proc/sys/vm/swappiness
我的.cnf 文件
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock # Here is entries for some specific programs # The following values assume you have at least 32M ram # This was formally known as [safe_mysqld]. Both versions are currently parsed. [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 log-warnings = 2 log-error = /var/log/mysqld.log [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /data/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking # # * Fine Tuning # key_buffer_size = 16M max_allowed_packet = 128M thread_stack = 192K thread_cache_size = 64 table_open_cache = 3000 #open_file_limit = 10000 join_buffer_size = 128k # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover = BACKUP max_connections = 3000 wait_timeout = 150 interactive_timeout = 30 innodb_buffer_pool_size = 25G # The preferred value size for the log_file_size is 25% of the innodb_buffer_pool_size. innodb_log_file_size = 1G #innodb_log_buffer_size = 512M innodb_buffer_pool_instances = 10 tmp_table_size = 256M max_heap_table_size = 256M innodb_flush_log_at_trx_commit = 2 query_cache_limit = 64M query_cache_size = 256M server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 1 max_binlog_size = 100M [mysqldump] quick quote-names [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M
您似乎錯誤地配置了 mysqld,並且該服務保留的記憶體比伺服器實際擁有的記憶體多(VIRT 是 37G,但伺服器有 32G)。請看一下文件。我不知道您的 my.cnf,但您應該首先將 innodb_buffer_pool_size 設置為 24G 並重新啟動服務。
在 32G 的機器上擁有 25G 的緩衝池是合理的。這為主要記憶體區域保留了 25GB。(如果您要執行其他會消耗 RAM 的應用程序,請降低 25G 以為它們騰出空間。)
輸出表明您沒有交換;好的。這意味著有許多 mysql 程序活著,但可能什麼都不做。這個是正常的。但是,
thread_cache_size
是 64;這是不必要的大;10 通常就足夠了。
query_cache_size
- 低至 50M;具有較大的值可以減慢速度。
max_connections
——降低到幾百。只有極少數安裝需要超過 1000 個。如果需要 3000 個,您還有其他問題,需要解決。你說它的峰值是1700?你的客戶是什麼樣的?他們沒有斷開連接嗎?他們是否允許過多的連接?例如,Apache 有MaxClients
,應該只有 20 個,而不是什麼巨大的價值。