mysql内存持续增长

mysql内存持续增长,第1张

查看 /proc/meminfo

Tips:

“大内存页”也称传统大页、大页内存等有助于 Linux 进行虚拟内存的管理,标准的内存页为 4KB,这里使用“大内存页”最大可以定义 1GB 的页面大小,在系统启动期间可以使用“大内存页”为应用程序预留一部分内存,这部分内存被占用且永远不会被交换出内存,它会一直保留在那里,直到改变配置。(详细介绍请看下面链接官方解释)

那么这么大页内存是分配给谁的呢?

查询一下:

shell>/proc/sys/vm/hugetlb_shm_group

27

shell>id 27

uid=27(mysql) gid=27(mysql) groups=27(mysql)

hugetlb_shm_group 文件里填的是指定大页内存使用的用户组 id,这里查看到是 MySQL 组 id,那既然是给 MySQL 的为什么 free 等于 total,并且 mysql 还只有 20 多 G 实际使用内存呢?

原来在 MySQL 中还有专门启用大内存页的参数,在 MySQL 大内存页称为 large page。

查看 MySQL 配置文件

发现配置文件中确实有 large-page 配置,但出于禁用状态。

后与业务确认,很早之前确实启用过 mysql 的 large page,不过后面禁用了。排查到这基本就有了结论。

结论

这套环境之前开启了 20000 的大内存页,每页大小为 2MB,占用了 40G 内存空间,给 MySQL 使用,并且 MySQL 开启了 large page,但后来不使用的时候,只关闭了 MySQL 端的 large page 参数,但没有实际更改主机的关于大内存页的配置,所以导致,实际上主机上的还存在 20000 的大内存页,并且没在使用,这一部分长期空闲,并且其他程序不能使用。

所以 MySQL 在使用 20G 内存左右,整个主机内存就饱和了,然后在部分条件下,就触发了 OOM,导致 mysqld 被 kill,但主机上又有 mysqld_safe 守护程序,所以又再次给拉起来,就看到了文章初的偶尔连接不上的现象。

我也遇到了MYSQL应用程序批量插数据时,程序内存一直增长!搞了两天,终于发现,不是My.ini的调参的问题,而是在执行插入后,声明的MySqlCommand对象没有明确析构的问题。

public override int ExecuteNonQuery(string commandText)

{

MySqlConnection conn = null

MySqlCommand sqlcommand = null

try

{

using (conn = new MySqlConnection(ConnectionString))

{

conn.Open()

sqlcommand = new MySqlCommand(commandText, conn)

int res = sqlcommand.ExecuteNonQuery()

return res

}

}

catch (Exception ex)

{

MessageBox.Show(string.Format("数据库连接或查询失败!\r\n{0}", ex.Message), "错误", MessageBoxButtons.OK,

MessageBoxIcon.Error)

return -1

}

finally

{

if (sqlcommand != null) sqlcommand.Dispose()//缺少这句话,内存会一直增长!

if (conn != null) conn.Close()

}

}

检查一下my.ini的配置table_cache=1024物理内存越大,设置就越大.默认为2402,调到512-1024最佳innodb_additional_mem_pool_size=4M 默认为2Minnodb_flush_log_at_trx_commit=1 (设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1)innodb_log_buffer_size=2M 默认为1Minnodb_thread_concurrency=8 你的服务器CPU有几个就设置为几,建议用默认一般为8key_buffer_size=256M 默认为218 调到128最佳tmp_table_size=64M 默认为16M调到64-256最挂read_buffer_size=4M 默认为64Kread_rnd_buffer_size=16M 默认为256Ksort_buffer_size=32M 默认为256Kmax_connections=1024 默认为1210thread_cache_size=120 默认为60query_cache_size=64M


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5903647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存