(编辑:jimmy 日期: 2025/1/2 浏览:2)
谈及linux内存,很多时候,我们会关注free,top等基础命令。当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力。本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE应该具备的最基础能力。
2.1 free命令原理
free是通过查看 /proc/meminfo 来获取内存的使用情况。但是 /proc/meminfo 这个文件又是怎么来的?我们先了解下 /proc 目录:
结论: /proc/meminfo 是 /proc 文件系统下保存你内存相关信息的"伪文件"。
2.2 命令输出简介
每个发行版输出都有一定差异,我们以debian8 4.19.x发行版为例。
root@4f996feeb851:~# free -m total used free shared buffers cached Mem: 1991 1909 81 4 155 836 -/+ buffers/cache: 917 1073 Swap: 1023 1 1022
大部分的命令输出意思,大家可以在man文档中找到解析,这里不做赘述。
2.3 buffer和cache会使用内存吗?
答案是肯定的,先来了解下buffer和cache。
然而,free命令所展示的buffer和cache 有点狭义的意思——free展示的buffer表示 块设备所占用的缓存 、free展示的cache表示普通文件占用的the page cache(缓存页) 。
总之,buffer和cache使用的内存都是用来加速Linux读写性能,如果有新的进程需要内存,系统会将buffer和cache占用的内存回收,并重新分配给进程使用。
2.4 其他内存概念
RSS & VSZ & PSS & USS
usedMem分为 active & inactive
Linux会维护一个LRU List用来管理活动页和非活动页的回收。 简单讲, 越接近该List的末尾,该页面被回收的概率就越大,反之,越接近列首,则更不易被回收。 linux内核会维护两类LRUList——active list和inactive list,刚访问过的页面放入active list,长时间未访问的页面放入inactive list,内核线程kswapd会定期将active list中的页面移至"htmlcode">
1. 简介 swappiness范围0-100,默认60 0: 表示禁止使用swap 60: 默认 100: 疯狂使用swap 2. 操作方法 # sysctl vm.swappiness=VALUE # sysctl vm.swappiness=20 或者 # echo VALUE > /proc/sys/vm/swappiness # echo 30 > /proc/sys/vm/swappiness
通过在线增加swap分区大小,临时控制内存泄露,内存不够用等异常。
1. 需要root用户 2. 创建存储文件 # dd if=/dev/zero of=/home/swap2G bs=1024 count=2M 3. 安全设置 # chown root:root /home/swap2G # chmod 0600 /home/swap2G 4. 创建liunx交换分区 # mkswap /home/swap2G 5. enable 交换分区 # swapon /home/swap2G 6. 更新fstab文件【注意: 部分操作系统不需要】 # vim /etc/fstab /home/swap2G none swap sw 0 0 7. 检查是否生效 #free -m 8. 卸载swap分区 # swapoff /home/swap2G
5.2 缓存相关
sync; echo 3 > /proc/sys/vm/drop_caches 0:不释放 1:释放页缓存 2:释放 dentries 和 inodes 3:释放所有缓存
5.3 OOM相关