2.6-内存性能-快速定位系统内存问题

目录

六、快速定位系统内存问题

6.1 内存性能指标

6.1.1 系统内存使用情况

6.1.2 进程内存的使用情况

6.1.3 Swap 的使用情况

6.2 内存性能工具

6.2.1 系统/进程内存 —— free、top/ps

6.2.2 缓存、缓存区 —— proc/vmstat/cachestat/cachetop

6.2.3 内存泄露 —— vmstat/memleak

6.2.4 Swap —— sar/cachetop/proc

6.3 性能指标与工具间的联系

6.3.1 内存指标 ——> 性能工具

6.3.2 性能工具 ——> 内存指标

6.4 快速分析内存的性能瓶颈

6.4.1 具体分析思路

6.4.2 案例分析

6.5 内存调优


六、快速定位系统内存问题

背景:

有没有快速定位内存问题的方法?

当定位出内存的瓶颈后,又有哪些优化内存的思路?

6.1 内存性能指标

6.1.1 系统内存使用情况

  1. 已用内存和剩余内存
    1. 已经使用和还未使用的内存
  2. 共享内存
    1. 通过 tmpfs 实现,他的大小也就是 tmpfs 使用的内存大小
    2. tmpfs 也是一种特殊的缓存
  3. 可用内存
    1. 新进程可以使用的最大内存
      1. 剩余内存
      2. 可回收缓存
  4. 缓存
    1. 磁盘读取文件的页缓存
      1. 用来缓存从磁盘读取的数据,可以加快以后再次访问的速度
    2. Slab 分配器中的课回收内存
  5. 缓存区
    1. 对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据。这样,内核就可以把分散的写集中起来,统一优化磁盘写入。

6.1.2 进程内存的使用情况

  1. 进程的虚拟内存
    1. 进程代码段
    2. 数据段
    3. 共享内存
    4. 已经申请的堆内存(即是还没分配物理内存)
    5. 已经换出的内存
  2. 进程的常驻内存
    1. 进程实际使用的物理内存
    2. 不包括 Swap 和共享内存
    3. 一般会换算成站系统总内存的百分比,也就是进程的内存使用率
  3. 进程的共享内存
    1. 与其他进程共同使用的真实的共享内存
    2. 加载的动态链接库以及程序的代码段
  4. Swap 内存
    1. 通过 Swap 换出到磁盘的内存
  5. 缺页异常
    1. 可以直接从屋里内存中分配 —— 次缺页异常
    2. 需要磁盘 I/O 介入(比如 Swap) —— 主缺页异常
      1. 主缺页异常升高,意味着需要磁盘 I/O ,那么内存访问也会慢很多

6.1.3 Swap 的使用情况

  1. Swap 的已用空间和剩余空间
    1. 已经使用和没有使用的内存空间
  2. 换出换入速度
    1. 每秒钟换出和换入内存的大小

6.2 内存性能工具

6.2.1 系统/进程内存 —— free、top/ps

free —— 查看系统的整体内存和 Swap 使用情况

top/ps —— 查看进程的内存使用情况

6.2.2 缓存、缓存区 —— proc/vmstat/cachestat/cachetop

proc 文件系统 —— 找到内存指标来源

vmstat —— 动态观察内存变化情况、区分缓存和缓存区、Swap 换入和换出的内存大小

cachestat —— 查看系统缓存的读写命中情况

cachetop —— 观察每个进程缓存的读写命中情况

6.2.3 内存泄露 —— vmstat/memleak

vmstat —— 观察内存变化情况

memleak —— 根据内存分配栈,找出内存泄漏的原因

6.2.4 Swap —— sar/cachetop/proc

sar —— 发现缓冲区和 Swap 升高问题

cachetop —— 缓冲区升高的原因

6.3 性能指标与工具间的联系

6.3.1 内存指标 ——> 性能工具

6.3.2 性能工具 ——> 内存指标

6.4 快速分析内存的性能瓶颈

关键词,找关联

6.4.1 具体分析思路

  1. free和top
    1. 查看系统整体的内存使用情况
  2. vmstat和pidstat
    1. 查看一段时间的趋势,判断出内存问题的类型
  3. 详细分析
  • 内存分配分析
    • 具体进程的内存使用分析
    • 缓存/缓冲区分析

 

6.4.2 案例分析

  1. free 发现大部分内存都被缓存占用
    1. 可以使用 vmstat 或 sar 观察一下缓存的变化趋势,确认缓存的使用是否还在继续增大
    2. 如果继续增大,说明导致缓存升高的进程还在运行,使用缓存/缓冲区分析工具(cachetop、slabtop),分析这些缓存到底被哪里占用
  2. free 发现系统可用内存不足
    1. 确认内存是否被缓存/缓冲区占用
    2. 排除缓存/缓冲区后,可以继续使用 pidstat/top,定位占用内存最多的进程
    3. 找出进程后,通过进程内存空间工具——pmap,分析是否存在内存泄露问题
  3. vmstat/sar 发现内存在不断增长,分析是否存在内存泄露
    1. 内存分配分析工具——memleak,检查是否存在内存泄漏
    2. 如果存在,memleak会输出内存泄漏的进程以及调用堆栈

6.5 内存调优

核心:保证应用程序的热点数据放在内存中,并尽量减少换页和交换

优化思路如下:

  1. 最好禁止Swap
    1. 如若要开启,将低 swappiness 的值,减少内存回收时 Swap 的使用倾向
  2. 减少内存的动态分配
    1. 使用内存池
    2. 大页
  3. 尽量使用缓存和缓冲区来访问数据
    1. 使用堆栈明确声明内存空间,来存储需要缓存的数据
    2. 使用 Redis 这类外部缓存组件,优化数据访问
  4. 使用 cgroups 等方式限制进城的内存使用情况,确保系统内存不会被异常进程消耗尽
  5. 通过/proc/pid/oom_adj,调整核心应用的 oom_score,保证及时内存紧张,核心应用也不会被 oom 杀死

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值