您的位置:首页 > 教程 > linux > Linux系统诊断之内存基础深入详解

Linux系统诊断之内存基础深入详解

2022-06-19 19:31:47 来源:易采站长站 作者:

Linux系统诊断之内存基础深入详解

1.背景谈及linux内存,很多时候,我们会关注free,top等基础命令。当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力。本篇幅不做深层讨论,能把当前系统的问题描述...Ikn站长之家-易采站长站-Easck.Com

1.背景

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

2. free

2.1 free命令原理Ikn站长之家-易采站长站-Easck.Com

free是通过查看 /proc/meminfo 来获取内存的使用情况。但是 /proc/meminfo 这个文件又是怎么来的?我们先了解下 /proc 目录:Ikn站长之家-易采站长站-Easck.Com

/proc 是一个虚拟文件系统,该目录下的所有文件都是伪文件,该类文件只存在于内存中,并不占用空间——使用 du -sh 即可验证,该模具路下的磁盘占用都是0。
/proc 下的所有文件都是内核调用proc_create() 接口来创建的虚拟条目。
/proc 中的文件,大多反馈系统信息的实时情况(进程、内存、cpu、设备信息等)。

结论: /proc/meminfo 是 /proc 文件系统下保存你内存相关信息的"伪文件"。Ikn站长之家-易采站长站-Easck.Com

2.2 命令输出简介Ikn站长之家-易采站长站-Easck.Com

每个发行版输出都有一定差异,我们以debian8 4.19.x发行版为例。Ikn站长之家-易采站长站-Easck.Com

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文档中找到解析,这里不做赘述。Ikn站长之家-易采站长站-Easck.Com

used: 已使用的内存 used = total - free -buffers -cached
free: 未使用的内存 memFree & swapFree in /proc/meminfo
shared: tmpfs使用的内存 shmem in /proc/meminfo
buffers:被内核缓冲去使用的内存
cached: 被页缓存和slabs使用的内存
buffers/cache: 表示buffers和cache的总和
swap: 交换分区的使用量

2.3 buffer和cache会使用内存吗?Ikn站长之家-易采站长站-Easck.Com

答案是肯定的,先来了解下buffer和cache。Ikn站长之家-易采站长站-Easck.Com

cache(缓存)官方定义是用来弥补高速设备和低速设备之间的访问速度不匹配而预留的一段空间,用来加快资源的访问。 简单讲就是读的更快。
buffer(缓冲)是为了做资源写入整形,计算机遇到大量的“小规模IO”时,会将其整形为少量的“大规模IO”,降低写入次数。从而达到“写资源”合理利用的效果。

然而,free命令所展示的buffer和cache 有点狭义的意思——free展示的buffer表示 块设备所占用的缓存 、free展示的cache表示普通文件占用的the page cache(缓存页) 。Ikn站长之家-易采站长站-Easck.Com

总之,buffer和cache使用的内存都是用来加速Linux读写性能,如果有新的进程需要内存,系统会将buffer和cache占用的内存回收,并重新分配给进程使用。Ikn站长之家-易采站长站-Easck.Com

2.4 其他内存概念Ikn站长之家-易采站长站-Easck.Com

RSS & VSZ & PSS & USSIkn站长之家-易采站长站-Easck.Com

RSS(Resident Set Size):进程实际使用的物理内存大小,包括sharedMem。
VSZ(Virtual Memory Size):进程所有能够访问到的内存大小,包括因为缺页中断,被swap出去的内存大小,以及sharedMem。
PSS(Proportional Set Size):按照比例将内存的大小加到RSS中。
USS(Unique Set Size):进程独占的物理内存大小。

usedMem分为 active & inactiveIkn站长之家-易采站长站-Easck.Com

active:表示这部分的内存正在被某个特定的进程使用,不太可能被收回。
inactive:表示这部分内存是被分配到某个不在running状态的进程,有可能会被回收。

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

如果系统的inactive的内存过大,可以通过如下操作对其做回收。Ikn站长之家-易采站长站-Easck.Com
sync; echo 3 > /proc/sys/vm/drop_cachesIkn站长之家-易采站长站-Easck.Com

3. 虚拟内存

现代x86系统,计算机能够使用的内存会大于其物理内存的上限,依靠的就是虚拟内存机制。Linux支持虚拟内存机制和实模式机制。Ikn站长之家-易采站长站-Easck.Com

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

在磁盘和内存之间传送Page的活动叫做swapping或者页面调度(paging),被用作虚拟内存的磁盘分区称为swap。Ikn站长之家-易采站长站-Easck.Com

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

4. OOM

1.What is OOM?Ikn站长之家-易采站长站-Easck.Com

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

2.哪些行为会让系统对进程进行打分?Ikn站长之家-易采站长站-Easck.Com

进程使用fork(2)调用,创建众多子进程时,会加分(+)
进程已经运行了很长时间,或者和使用了大量的CPU时间,会减分(-)
进程的nice值如果比较低,会加分(+)
进程如果是特权进程(privileged),会减分(-)
进程如果对硬件设备进行直接访问,会减分(-)

3.在哪儿可以看到进程的打分?Ikn站长之家-易采站长站-Easck.Com

/proc/<pid>/oom_scoreIkn站长之家-易采站长站-Easck.Com

4.手动调整分数Ikn站长之家-易采站长站-Easck.Com

/proc//oom_adj 该文件可以用于调整在oom发生时,哪些进程应该被kill,范围-16 -- +15 ,默认值为0,  Ikn站长之家-易采站长站-Easck.Com

特殊值-17:表示进程永远不会被kill。Ikn站长之家-易采站长站-Easck.Com

5.我怎么知道系统有没有触发过OOM?Ikn站长之家-易采站长站-Easck.Com

/var/log/messages 、 /var/log/syslog 系统日志或者 dmesg 系统日志诊断工具等都能够找到Ikn站长之家-易采站长站-Easck.Com

5. 内存相关配置

5.1 swap相关配置Ikn站长之家-易采站长站-Easck.Com

通过调节系统参数,来告诉计算机使用swap分区的权重Ikn站长之家-易采站长站-Easck.Com

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分区大小,临时控制内存泄露,内存不够用等异常。Ikn站长之家-易采站长站-Easck.Com

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 缓存相关Ikn站长之家-易采站长站-Easck.Com

sync; echo 3 > /proc/sys/vm/drop_caches
 
0:不释放
1:释放页缓存
2:释放 dentries 和 inodes
3:释放所有缓存

5.3 OOM相关Ikn站长之家-易采站长站-Easck.Com

vm.panic_on_oom
是否在触发 oom 机制时触发 kernel panic。0表示关闭(推荐),1表示打开。 kernel panic是指计算机遇到了致命的错误,并且他不知道该怎么处理时的一种动作——可以类比windows的蓝屏。 我们当然不希望每次计算机在oom时就直接蓝屏。推荐设置为0
vm.overcommit_kbytes:
用于限制进程能够申请的最大内存,0表示不设置,如果设置其他数值,比如400,则进程能够申请到的最大内存为 swap+400kBytes
vm.overcommit_ratio:
定义了进程可以使用的最大内存(百分比模式),默认为50。表示配置50之后,进程不允许申请超过 swap + 50% * 物理内存总量 以上的内存
vm.oom_kill_allocating_task (Linux 2.6.24+支持)
这在内存不足的情况下启用或禁用杀死OOM触发任务。0表示禁用(默认),1表示启用。可以理解为oom机制的开关,默认为禁用——表示要让oom触发器正常执行。
其他有兴趣的话,可以自行man proc

到此这篇关于Linux系统诊断之内存基础深入详解的文章就介绍到这了,更多相关Linux系统诊断之内存基础内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!Ikn站长之家-易采站长站-Easck.Com

Ikn站长之家-易采站长站-Easck.Com

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25