没腿的鸟 发表于 2024-6-13 20:21:03

内存去哪儿了——linux free 命令检察内存偏小

    相信很多公司都在使用云服务器,不知道大家有没有留意到,当你购买了一台云服务器以后,在操纵体系里面通过 free 命令检察服务器的内存,容量总是会小于在云厂商控制台上面看到的内存容量。
    为什么会这样呢,那就带着疑问往下看。
现象描述


[*] 购买了2台云服务,控制台上面显示的内存是4GiB(4096MiB)https://img-blog.csdnimg.cn/ed47e72163944294a2fb05738999d9e9.jpeg
[*] 登陆到操纵体系里面检察内存巨细,通过 free -m 命令发现呆板的total内存比现实购买的要小。
10.0.1.229这台是CentOS6.5,体系内内存巨细为3832MiB,少264MiB。
https://img-blog.csdnimg.cn/c2ec66400f77400ca270ea60290ba9df.jpeg
10.0.1.228这台是CentOS7.8,体系内内存巨细为3789MiB,少307MiB。
https://img-blog.csdnimg.cn/01a1a73ee6e548879eb88747eafc4b6c.jpeg
问题分析

    看到这里,可能大家会意料是不是服务器有问题,给我们少分配了一点内存,又或者不会太在意这一点点内存。下面将举行详细分析。
1. kdump先容

    在分析这个问题之前,先来相识下kdump。
    kdump是Linux体系的一种高级故障处置惩罚机制,它可以在Linux体系内核瓦解时网络内存转储文件(crashdump),以便在分析转储文件时诊断问题。kdump可以帮助开发职员在内核瓦解时,更快地找到问题所在,以便更快地修复问题。
2. grub配置

    kdump必要预留部门内存供转储内核使用,所以必要配置grub文件。
CentOS6
    配置/etc/grub.conf,在 kernel 后面添加如下:
    kernel crashkernel=auto
CentOS7
    配置/etc/default/grub,GRUB_CMDLINE_LINUX 后面添加如下:
    crashkernel=auto
    此中crashkernel表示预留给转储的内存巨细,auto表示体系自动分配,也可以直接写巨细,比如预留128M写成crashkernel=128M
3. 问题缘故原由

    此时再来看看本身的服务器配置
https://img-blog.csdnimg.cn/248b991c61d34c888ea52e995e4c677d.jpeg
    发现是配置了内核转储,所以服务器预留了部门内存。
    故 free -m 看到的内存巨细会偏小。
    再看另外一台CentOS7.8的配置
https://img-blog.csdnimg.cn/7f6389c8db3a45e08abf99756bf7bbc4.jpeg
    同样是配置了内核转储,所以 free -m 看到的内存巨细也会偏小。
4. 关闭转储

    CentOS6.5 呆板在 /etc/grub.conf 删除crashkernel=auto,或者设置crashkernel=0,然后重启呆板。
    此时内存为 3961MiB,多出了 129MiB。
https://img-blog.csdnimg.cn/12aa835fc5e64fe6a4c0400e58293031.jpeg
    CentOS7.8呆板在 /etc/default/grub 删除crashkernel=auto,或者设置crashkernel=0,执行 grub2-mkconfig -o /boot/grub2/grub.cfg,然后重启呆板。
    此时内存为 3950MiB,多出了 161MiB
https://img-blog.csdnimg.cn/a7c08008075342fd8f3f87ee0715be13.jpeg
    大家可能会说这时间的内存巨细还是比控制台上面的 4096MiB小,这是因为操纵体系本身会占用一定内存,但是free命令不会统计。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 内存去哪儿了——linux free 命令检察内存偏小