当前位置:首页 > 内存 > 正文

MySQL占用内存过大(pgsql内存占用高)

  • 内存
  • 2024-08-18 06:12:30
  • 2945

一、mysql数据库导致cpu100%?如果你看你数据库读取的数据,CPU运行在100%其实是不正常的。您可以检查是否有任何漏洞或其他正在消耗资源的进程。


二、mysql配置过大内存导致无法启动怎么办如何解决

参见/proc/meminfo

提示:

“大内存页”也称为传统大页、大页内存等,帮助Linux管理虚拟内存,是标准内存页为4KB这里,“大内存页”可用于指定最大页大小为1GB在系统启动过程中,“大内存页”可用于保存部分应用程序内存。这部分内存已被占用,不会用于更改内存,它将保留在那里,直到配置更改。(详细介绍请看下面链接中的官方解释)

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

检查:

/proc/sys/vm/hugetlb_shm_group

27

id27

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

hugetlb_shm_group文件填充指定大页内存使用的用户组的ID,可以在这里查看是MySQLpoolid既然是给MySQL用的,为什么free等于amount,而mysql实际使用的内存只有20多GB呢?

原来MySQL中有一个参数是专门启用大内存页的,在MySQL中,大内存页称为大页。

查看MySQL配置文件

发现配置文件中确实有大页配置,但处于禁用状态。

与业务确认后,largepagemysql确实很早就启用了,但后来又禁用了。经过调查这件事,我们基本上得出了结论。

结论

该环境之前启用了20000个大内存页,每个页大小为2MB,占用40G内存空间,被MySQL使用并且MySQL启用的Largepage已经关闭,但是后面不使用的时候,只是关闭了MySQL部分的大内存页参数,并没有真正改变大内存页主机的配置所以,实际上主机上还有20000个大内存页,并且不使用时,这部分会长期闲置,无法被其他程序使用。

所以当MySQL使用了20G左右的内存时,主机整个内存就饱和了,然后在一定条件下触发OOM,导致mysqld被杀掉,但是主机上有一个mysqld_safe守护进程,于是又出现拉上来后,看到文章开头偶尔出现连接失败的情况。