简介: Linux系统诊断内存基础

1. 背景

谈及linux内存,很多时候,我们会关注free,top等基础命令。当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力。本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE应该具备的最基础能力。

2. free

2.1 free命令原理

free是通过查看 /proc/ 来获取内存的使用情况。但是 /proc/ 这个文件又是怎么来的?我们先了解下 /proc 目录:

结论: /proc/ 是 /proc 文件系统下保存你内存相关信息的”伪文件”。

2.2 命令输出简介

每个发行版输出都有一定差异,我们以 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 和cache会使用内存吗?

答案是肯定的,先来了解下和cache。

然而,free命令所展示的和cache 有点狭义的意思——free展示的表示 块设备所占用的缓存 、free展示的cache表示普通文件占用的the page cache(缓存页) 。

总之,和cache使用的内存都是用来加速Linux读写性能,如果有新的进程需要内存,系统会将和cache占用的内存回收,并重新分配给进程使用。

2.4 其他内存概念

RSS & VSZ & PSS & USS

分为 &

Linux会维护一个LRU List用来管理活动页和非活动页的回收。 简单讲, 越接近该List的末尾,该页面被回收的概率就越大,反之,越接近列首,则更不易被回收。 linux内核会维护两类—— list和 list,刚访问过的页面放入 list,长时间未访问的页面放入 list,内核线程会定期将 list中的页面移至  list中。

如果系统的的内存过大,可以通过如下操作对其做回收。

sync; echo 3 > /proc/sys/vm/

3. 虚拟内存

现代x86系统,计算机能够使用的内存会大于其物理内存的上限,依靠的就是虚拟内存机制。Linux支持虚拟内存机制和实模式机制。

实模式下,计算机会直接申请物理内存, 虚拟内存机制下,系统会把磁盘当成内存的扩展,已增加可使用的内存大小。并通过映射map的机制,来保存和物理内存的真实对应关系。

在磁盘和内存之间传送Page的活动叫做或者页面调度(),被用作虚拟内存的磁盘分区称为swap。

可以通过在线添加swap的方式临时缓解内存不足的问题,但一般不能直接作在线减少swap的操作,很有可能导致进程的crash。具体swap配置方式见5.1swap相关配置。

4. OOM

1.What is OOM?

Out Of 是 Linux 的一种系统保护机制,在系统内存紧张时,kill掉某些进程防止系统卡死。系统通过打分机制,来实施对进程的杀死操作。默认机制是通过扫描所有进程的内存占用,cpu占用等因素,然后打分  (),分数越高,进程被kill的优先级就越高。

2.哪些行为会让系统对进程进行打分?

3.在哪儿可以看到进程的打分?

/proc/

/

4.手动调整分数

/proc// 该文件可以用于调整在oom发生时,哪些进程应该被kill,范围-16 — +15 ,默认值为0,

特殊值-17:表示进程永远不会被kill。

5.我怎么知道系统有没有触发过OOM?

/var/log/ 、 /var/log/ 系统日志或者 dmesg 系统日志诊断工具等都能够找到

网图如下:

dmesg_dmesg时间_dmesg-T

5. 内存相关配置

5.1 swap相关配置

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

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相关

6. 结语

如有纰漏欢迎指正。

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!