ECS内存使用常见问题

举报
云技术搬运工 发表于 2021/05/31 11:39:39 2021/05/31
【摘要】 在ECS的使用中会出现一些关于内存的使用问题,例如: 1、我的ECS实际可以使用的总内存(MemTotal)与购买的规格不一致 2、free查到的服务器内存已使用数量跟top显示的进程使用内存不一致 上述问题中通常为系统设置产生,该文档对以上问题场景进行分析和处理。

【问题背景】

在ECS的使用中会出现一些关于内存的使用问题,例如:

1、我的ECS实际可以使用的总内存(MemTotal)与购买的规格不一致

2、free查到的服务器内存已使用数量跟top显示的进程使用内存不一致

上述问题中通常为系统设置产生,该文档对以上问题场景进行分析和处理。

【问题分析与处理】

问题一:

我的ECS实际可以使用的总内存(MemTotal)与购买的规格不一致

问题现象

从free和/proc/meminfo中看到的总内存小于购买的规格内存(实际ECS规格为2G)1.png

问题分析

1、可以通过dmesg查看系统启动时内存分配情况

# dmesg | grep Memory

2.png

如上图所示,实际总内存为2096440KB,其中可用内存为1860840KB,absent 392KB,reserved 235408KB。

kdump使用kexec引导到第二个内核(捕获内核),第二个内核位于第一​​个内核无法访问的系统内存的reserved部分中,第二个内核捕获崩溃的内核内存的内容(崩溃转储)并保存,且reserved 内存属于第二内核,并且永远不会被释放或交换。

系统可用内存的计算方式为:

available = 物理内存 – absent – reserved

确认是否配置crashkernel,可以通过查看/proc/cmd

# cat /proc/cmdline

3.png如上图所示可以确认crashkernel已开启,crashkernel中内存包含在reserved中。

确认不需要kdump可以释放该部分内存。释放crashkernel使用的内存会导致kdump无法使用。

操作步骤

1、修改grub配置,删除crashkernel配置项。

# cp /etc/default/grub /etc/default/grub.bak

打开/etc/default/grub找到GRUB_CMDLINE_LINUX行,将crashkernel=auto(crashkernel的值可能为具体的值或者范围,以实际参数设置为准)参数删除。

4.png

2、使用grub2-mkconfig 命令重新生成cfg文件

# grub2-mkconfig -o /boot/grub2/grub.cfg

3、重启服务器

说明

步骤2中如果出现:error: environment block too small

则运行以下命令后:

# mv /boot/grub2/grubenv /grubenv.bak

# grub2-mkconfig -o /boot/grub2/grub.cfg

 

问题二:

free查到的服务器内存已使用数量跟top显示的进程使用内存不一致

问题现象

在4U8G的linux弹性云服务器,执行free –lh 命令后发现显示已使用内存5.9G,使用率将近78%,top查询的内存使用率只有不到10%,与free –lh的结果不匹配。5.png

6.png

问题分析

在某些场景和应用中需要在系统内配置hugepage(大页内存)和共享内存,而大页内存和共享内存体现在free的结果中的used但是不会计算在进程的使用内存中,针对此类问题可以从这个方向进行定位。

我们可以通过atop命令在MEM行可以看到内存的分配详情,如下图标记处可以看到hptot(hugepage total)项为4.9G。

7.png

这部分内存,即被“大内存页”占用的这些存储器永远不会被交换出内存。它会一直保留除非修改了配置。

大页内存的详情可以通过/proc/meminfo查看

# cat /proc/meminfo |grep Huge

8.png

可以看到开启了Huge,每个大页内存的大小是2048kB,大页内存的数据是2520个,加起来一共使用了5G内存。free –lh显示的5.9G的内存使用量,减去大页内存5G,实际使用的是0.9G.使用率跟top查询的结果相匹配。

大页内存在某些应用是必要的配置,是否取消大页内存需要根据实际场景进行决定。大页内存的设置可以通过内核参数vm.nr_hugepages进行设置。

说明:

1、HugePages 是 Linux 操作系统的一个内核特性,让操作系统可以支持现代硬件架构的大页面容量功能。通过启用 HugePages 并使用大页面,可以用一个页表条目代表一个大页面,而不是使用许多条目代表较小的页面,从而可以管理更多内存,减少操作系统对页面状态的维护并提高 TLB 缓存命中率。在 Linux 中,Hugepage默认大小为 2 MB。

2、共享内存是多个进程间共同地使用同一段物理内存空间,它是通过将同一段物理内存映射到不同进程的 虚拟空间来实现的。由于映射到不同进程的虚拟空间中,不同进程可以直接使用,不需要像消息队列那样进行复制,所以共享内存的效率很高。

列出共享内存的使用

# ipcs –m

共享内存的设置可以通过内核参数kernel.shmall进行设置

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。