我发现mysql(在Centos7上)占用的内存越来越多,从htop我看到一个有许多线程的进程,我的内存约为550M/3G:
18895 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18896 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.63 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18897 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.65 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18898 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.64 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18899 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.43 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18900 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.73 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18901 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.40 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18902 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.67 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18903 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:05.11 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18904 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.38 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18905 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.86 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18906 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.17 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18908 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:03.69 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18909 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.33 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18910 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.67 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18911 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:04.85 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18912 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18913 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18914 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18915 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18916 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18917 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.35 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18918 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.67 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18919 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18920 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18921 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18923 mysql 20 0 1157M 173M 6928 S 0.0 6.1 0:00.01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --skip-grant-tables
18894 mysql 20 0 1157M 173M 6928 S 0.0 6.1 1:05.88
据我了解,这些过程都在缓冲中,从免费的角度来看也是如此:
total used free shared buff/cache available
Mem: 2845 402 92 154 2350 2110
Swap: 2047 0 2047
我已经尝试通过这种方式调整 mysql /etc/my.cnf 文件,但没有什么改进:
innodb_buffer_pool_size = 128M
join_buffer_size = 64M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max-connections=20
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
我很困惑为什么 htop(以及 Proxmox 内存监控)会报告这种使用情况,而 free 显示可用内存超过 2G:
Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||557M/2.78G]
对此有什么建议或解释吗?提前感谢任何回复。
答案1
mysqld 实际使用的内存为 173MB,与您粘贴的配置大致相同。Htop 分别显示所有线程,即使它们的内存实际上是共享的。
使用 top 可以获得更直观的表示。