• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux系统诊断之内存基础深入详解

    1.背景

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

    2. free

    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中的页面移至 inactive list中。

    如果系统的inactive的内存过大,可以通过如下操作对其做回收。
    sync; echo 3 > /proc/sys/vm/drop_caches

    3. 虚拟内存

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

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

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

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

    4. OOM

    1.What is OOM?

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

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

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

    /proc/pid>/oom_score

    4.手动调整分数

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

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

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

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

    5. 内存相关配置

    5.1 swap相关配置

    通过调节系统参数,来告诉计算机使用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

    通过在线增加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相关

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

    您可能感兴趣的文章:
    • Linux设置虚拟内存的教学与实战教程
    • Linux 下如何检查内存使用率
    • Linux系统为什么要吃掉我的“内存”
    • 解决Linux system v 共享内存问题
    • Linux系统查看CPU、机器型号、内存等信息
    • Linux内核设备驱动之内存管理笔记整理
    • Linux中大内存页Oracle数据库优化的方法
    • 浅谈Linux的虚拟内存
    上一篇:探索PowerShell(十四) 使用WMI对象的方法
    下一篇:Webshell基础知识深入讲解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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