服务内存占用分析


有时,我们有这样一些需求,分析进程的内存占用热点,便于进一步优化内存;分析进程的内存随时间变化情况,判断是否存在内存泄漏问题。这一类需求,首先需要先从进程层面查看服务究竟占用了多少内存,是否触及系统允许用户使用的最大内存,往往还需要进一步剖析究竟是哪些代码消耗了较多的内存。获取这些前置信息往往是后续分析和优化的前提。文章介绍了linux系统上如何查看进程内存大小,以及如何使用 valgrind massifjeprof工具分析内存热点和变化趋势。

1 查看进程内存常用命令

1.1 ps

ps -aux | grep redis

root      260337  0.0  0.1  68836 11640 ?        Ssl   2023 444:56 redis-server *:6380 [cluster]
root      260343  0.0  0.1  68476 11284 ?        Ssl   2023 440:08 redis-server *:6381 [cluster]

1.2 top

top -p $pid

Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.3 sy,  0.0 ni, 95.7 id,  0.5 wa,  0.0 hi,  0.2 si,  0.0 st
MiB Mem :   7768.7 total,    259.9 free,   4510.2 used,   2998.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   2959.8 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                 
 260337 root      20   0   68836  11640   3048 S   0.0   0.1 444:56.89 redis-server 

1.3 pidstat

pidstat -p $pid 1 -r:每隔1秒输出依次进程的内存使用情况

Linux 4.18.0-305.3.1.el8.x86_64 (VM-32-17-centos)       2024年03月26日  _x86_64_        (2 CPU)
22时24分01秒   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
22时24分02秒     0    260337      0.00      0.00   68836   11640   0.15  redis-server
22时24分03秒     0    260337      0.00      0.00   68836   11640   0.15  redis-server
22时24分04秒     0    260337      0.00      0.00   68836   11640   0.15  redis-server

2 详细的内存分布

2.1 valgrind massif

vrlgrind 提供了一种分析内存的工具massif,可以帮助我们分析进程的内存占用情况和变化趋势。massif

如何使用

例如我得程序名称为 demo, 启动方式为: ./bin/demo conf.json,那么我们可以通过下面两个步骤产出内存分析报告:

  1. 使用massif启动进程并开始对内存进行分析
    valgrind -v --tool=massif --detailed-freq=10 --depth=10 --threshold=1 --massif-out-file=./massif.out ./bin/demo conf.json
    启动后工具会对内存进行快照,每10个快照生成一次详细的分析,分析树中最大深度为10,内存占比小于1%的部分不在分析树中进行展示。之后,我们终止分析,会生成massif.out文件。
  2. ms_print massif.out 输出分析报告

输出报告怎么看

  1. 报告开始的地方会给出进程的一些信息和一个内存的统计图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值