22-答疑篇:Linux内存性能优化答疑





问题1: 内存回收与OOM

  1. 怎么理解LRU内存回收?

    一旦系统发现内存紧张,系统会通过三种方式回收内存

    1. 基于 LRU(Least Recently Used)算法,回收缓存
    2. 基于Swap机制,回收不常访问的匿名页
    3. 基于OOM(Out of Memory)机制,杀掉占用大量内存的进程

    缓存回收和Swap回收,实际上都是基于LRU算法,也就是优先回收不常访问的内存

    LRU回收算法,实际上维护着active和inactive两个双向链表

    1. active记录活跃的内存页
    2. inactive记录非活跃的内存页

    越接近链表尾部,就表示内存页越不常访问,在回收内存时,系统就可以根据活跃程度,优先回收不活跃的内存

    活跃和非活跃的内存页,按照类型的不同,又分别分为文件页和匿名页,对应着缓存回收和Swap回收

    可以从 /proc/meminfo 中,查询它们的大小

    # grep 表示只保留包含 active 的指标(忽略大小写)
    # sort 表示按照字母顺序排序
    [root@local_sa_192-168-1-6 ~]# cat /proc/meminfo | grep -i active | sort
    Active(anon): 167976 kB
    Active(file): 971488 kB
    Active: 1139464 kB
    Inactive(anon): 720 kB
    Inactive(file): 2109536 kB
    Inactive: 2110256 kB
    

  2. 回收后的内存又到哪里去了?

    内存回收后,会被重新放到未使用内存中。这样,新的进程就可以请求、使用它们


  3. OOM是按照虚拟内存还是实际内存来打分?

    OOM触发的时机基于虚拟内存。
    换句话说,进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的内存之和,
    比总的物理内存还大,就会触发OOM。

  4. 怎么估计应用程序的最小内存?

    要确定一个进程或者容器的最小内存,最简单的方法就是让它运行起来,
    再通过 ps 或 者 smap ,查看它的内存使用情况。
    不过要注意,进程刚启动时,可能还没开始处理实 际业务,一旦开始处理实际业务,就会占用更多内存。
    所以,要记得给内存留一定的余量




问题2: 文件系统与磁盘的区别

磁盘是一个存储设备(确切地说是块设备),可以被划分为不同的磁盘分区
而在磁盘或者磁盘分区上,还可以再创建文件系统,并挂载到系统的某个目录中
这样,系统就可以通过这个挂载目录,来读写文件

磁盘是存储数据的块设备,也是文件系统的载体
所以,文件系统确实还是要通过磁盘,来保证数据的持久化存储

Linux 中一切皆文件,可以通过相同的文件接口,来访问磁盘和文件(比如 open、read、write、close 等)

在读写普通文件时,I/O请求会首先经过文件系统,然后由文件系统负责,来与磁盘进行交互
而在读写块设备文件时,会跳过文件系统,直接与磁盘交互,也就是所谓的“裸 I/O”

这两种读写方式使用的缓存自然不同
文件系统管理的缓存,其实就是Cache的一部分
而裸磁盘的缓存,用的正是Buffer


posted @ 2021-12-14 16:32  李成果  阅读(122)  评论(0编辑  收藏  举报