NOTE
5.3 内存调优
1. 内存性能指标 1.1. 系统内存使用情况 1.1.1. 已用内存 已经使用的内存 1.1.2. 剩余内存 还未使用的内存 1.1.3. 共享内存 tmpfs使用的内存大小,其实也是一种缓存 1.1.4. 可用内存 剩余内存+缓存和缓冲区 1.1.5. 缓存和缓冲区 缓存分为两部分 - 磁盘读取
这是历史学习笔记,可能存在过时或不完整的理解。
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
2.2. free
free.md(关联笔记尚未公开)
2.3. vmstat
3. 如何分析内存性能瓶颈
3.1. 查看是否内存瓶颈
- 先用 free,查看系统整体的内存使用情况。
3.2. 找到内存占用高的进程
top命令,查看哪个进程占用内存高,记录其PID
3.3. 分析进程
- 如果是Java进程
- Java线上问题排查.md(关联笔记尚未公开)
- 如果是Golang进程