本周学习了内存优化,对linux内存这一块内容需要再深入学习,补足基础知识。

打算用问答的方式总结知识点:

  1. linux内存的工作原理?
  2. 虚拟内存空间如何分布? 答:参考笔记
  3. 内存是如何分配和回收的? 答:参考笔记
  4. 如何理解cache和buffer? 答:参考笔记

内存性能指标:

  • 1.系统内存指标

    • 已用内存:已经使用的内存
    • 剩余内存:还未使用的内存
    • 共享内存:通过tmpfs实现,高效率,df -h命令查看
    • 可用内存:新进程可以使用的最大内存,它包括剩余内存和可回收缓存
    • 缓存:一部分是磁盘读取文件的页缓存,另一部分是 Slab 分配器中的可回收内存
    • 缓存区:对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据。
    • 工具:free、ps、top、vmstat、sar、/pro/meminfo
  • 2.进程内存指标

    • 虚拟内存(vss):包括了进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内存等。
    • 常驻内存(rss):是进程实际使用的物理内存
    • 共享内存(uss):包括与其他进程共同使用的真实共享内存,还包括加载的动态链接库以及程序的代码段
    • Swap内存:通过 Swap 换出到磁盘的内存
    • 内存缺页
    • 工具:pmap、top、/proc/pid/status
  • 3.SWAP

    • 已用空间
    • 剩余空间
    • 换入速度:每秒内存换入的速度
    • 换出速度:每秒内存换出的速度
    • 工具:free、sar、vmsat

优化思路:

  1. 禁止swap(看情况)
  2. 减少内存的动态分配
  3. 尽量使用缓存(类似数据库的查询缓存)
  4. 使用cgroups等方式限制进程的内存使用情况
  5. 调整核心应用的oom_scor