NOTE

5.3 内存调优

1. 内存性能指标 1.1. 系统内存使用情况 1.1.1. 已用内存 已经使用的内存 1.1.2. 剩余内存 还未使用的内存 1.1.3. 共享内存 tmpfs使用的内存大小,其实也是一种缓存 1.1.4. 可用内存 剩余内存+缓存和缓冲区 1.1.5. 缓存和缓冲区 缓存分为两部分 - 磁盘读取

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 内存性能指标

1.1. 系统内存使用情况

1.1.1. 已用内存

已经使用的内存

1.1.2. 剩余内存

还未使用的内存

1.1.3. 共享内存

tmpfs使用的内存大小,其实也是一种缓存

1.1.4. 可用内存

剩余内存+缓存和缓冲区

1.1.5. 缓存和缓冲区

缓存分为两部分

  • 磁盘读取文件的页缓存
  • Slab分配器中的可回收内存 缓冲区指原始磁盘块的临时存储

1.2. 进程内存使用情况

1.2.1. 虚拟内存

进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内 存等 已经申请的内存,即使还没有分配物理内存,也算作虚拟内存

1.2.2. 常驻内存

进程实际使用的物理内存,不包括 Swap 和共享内存

1.2.3. 共享内存

既包括与其他进程共同使用的真实的共享内存,还包括了加载的动态链接库以及程序的代码段等

1.2.4. Swap内存

是指通过 Swap 换出到磁盘的内存

1.2.5. 缺页异常

调用内存分配请求,并不会立刻分配物理内存,而是等到请求首次访问时通过缺页异常来分配。缺页异常分为:

  • 主缺页异常:磁盘IO介入,比如Swap
  • 次缺页异常:直接从物理内存分配

1.3. Swap的使用情况

1.3.1. 已用空间和剩余空间

已经使用和没有使用的内存空间

1.3.2. 换入速度和换出速度

每秒钟换入和换出内存的大小

2. 内存性能工具

2.1. top

top.md

2.2. free

free.md(关联笔记尚未公开)

2.3. vmstat

vmstat.md

3. 如何分析内存性能瓶颈

3.1. 查看是否内存瓶颈

  1. 先用 free,查看系统整体的内存使用情况。

3.2. 找到内存占用高的进程

  • top命令,查看哪个进程占用内存高,记录其PID

3.3. 分析进程

  • 如果是Java进程
    1. Java线上问题排查.md(关联笔记尚未公开)
  • 如果是Golang进程
    1. pprof