掌握excel线性回归技巧助力数据分析与决策优化
1222
2022-05-29
【问题背景】
在ECS的使用中会出现一些关于内存的使用问题,例如:
1、我的ECS实际可以使用的总内存(MemTotal)与购买的规格不一致
2、free查到的服务器内存已使用数量跟top显示的进程使用内存不一致
上述问题中通常为系统设置产生,该文档对以上问题场景进行分析和处理。
【问题分析与处理】
问题一:
我的ECS实际可以使用的总内存(MemTotal)与购买的规格不一致
问题现象
从free和/proc/meminfo中看到的总内存小于购买的规格内存(实际ECS规格为2G)
问题分析
1、可以通过dmesg查看系统启动时内存分配情况
# dmesg | grep Memory
如上图所示,实际总内存为2096440KB,其中可用内存为1860840KB,absent 392KB,reserved 235408KB。
kdump使用kexec引导到第二个内核(捕获内核),第二个内核位于第一 个内核无法访问的系统内存的reserved部分中,第二个内核捕获崩溃的内核内存的内容(崩溃转储)并保存,且reserved 内存属于第二内核,并且永远不会被释放或交换。
系统可用内存的计算方式为:
available = 物理内存 – absent – reserved
确认是否配置crashkernel,可以通过查看/proc/cmd
# cat /proc/cmdline
如上图所示可以确认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的值可能为具体的值或者范围,以实际参数设置为准)参数删除。
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的结果不匹配。
问题分析
在某些场景和应用中需要在系统内配置hugepage(大页内存)和共享内存,而大页内存和共享内存体现在free的结果中的used但是不会计算在进程的使用内存中,针对此类问题可以从这个方向进行定位。
我们可以通过atop命令在MEM行可以看到内存的分配详情,如下图标记处可以看到hptot(hugepage total)项为4.9G。
这部分内存,即被“大内存页”占用的这些存储器永远不会被交换出内存。它会一直保留除非修改了配置。
大页内存的详情可以通过/proc/meminfo查看
# cat /proc/meminfo |grep Huge
可以看到开启了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进行设置
Linux 弹性云服务器 ECS
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。