Mysql

MySQL 伺服器消耗太多記憶體

  • August 25, 2016

目前我發生了以下情況:

在此處輸入圖像描述

和 :

在此處輸入圖像描述

當我執行查詢時,我得到大約 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 個,而不是什麼巨大的價值。

引用自:https://dba.stackexchange.com/questions/147838