进程内存占用分析
有时,我们有这样一些需求,分析进程的内存占用热点,便于进一步优化内存;分析进程的内存随时间变化情况,判断是否存在内存泄漏问题。这一类需求,首先需要先从进程层面查看服务究竟占用了多少内存,是否触及系统允许用户使用的最大内存,往往还需要进一步剖析究竟是哪些代码消耗了较多的内存。获取这些前置信息往往是后续分析和优化的前提。文章介绍了linux系统上如何查看进程内存大小,以及如何使用
valgrind massif、
jeprof工具分析内存热点和变化趋势。
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,那么我们可以通过下面两个步骤产出内存分析报告:
- 使用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文件。 ms_print massif.out输出分析报告
输出报告怎么看
- 报告开始的地方会给出进程的一些信息和一个内存的统计图



被折叠的 条评论
为什么被折叠?



