[Linux]Linux 单个进程内存监控

发布时间:2026/7/16 4:17:10
[Linux]Linux 单个进程内存监控 单个进程的内存监控一、实时监控单个进程内存动态刷新适合需要「实时观察进程内存变化」的场景如调试程序、监控服务内存波动bash# 1. 基础实时监控只显示目标进程 top -p [PID] # 替换[PID]为进程号按CtrlC退出 # 关键指标%MEM内存占比、VSZ虚拟内存KB、RSS物理内存KB # 2. 简化输出只显示内存相关列 top -p [PID] -b -n 10 -d 2 # 非交互式模式每2秒输出1次共10次 # 输出示例PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND # 1234 root 20 0 100000 50000 10000 R 0.0 2.5 0:05.23 ./myapp # 3. 只保留内存关键数据便于后续分析 top -p [PID] -b -n 1 | awk {print $1, $6, $7, $10} # 输出PID、VIRT、RES、%MEM二、查看进程内存详细分布定位内存占用模块适合需要「深入分析进程内存构成」的场景如找出哪个模块 / 共享库占用内存最多bash# 1. 查看进程内存模块分布按内存大小排序 pmap -x [PID] | sort -k3 -nr # 按“大小”降序排序重点关注“RSS”列物理内存 # 输出示例地址 权限 大小 RSS 匿名 映射文件 # 00007f0000000000 r-xp 10000 8000 0 /usr/lib64/libc.so.6 # 2. 查看进程内存段信息代码段、数据段等 cat /proc/[PID]/status | grep -E VmSize|VmRSS|VmData|VmCode # 输出说明 # VmSize虚拟内存总大小 # VmRSS物理内存使用大小实际占用 # VmData数据段大小堆、全局变量等 # VmCode代码段大小程序指令三、记录进程内存历史趋势排查内存泄漏适合需要「长期跟踪进程内存变化」的场景如验证是否存在内存泄漏bash# 1. 编写Shell脚本定时记录内存数据保存到文件 cat monitor_mem.sh EOF #!/bin/bash PID$1 # 第一个参数为进程号 INTERVAL5 # 每隔5秒记录1次 OUTPUTmem_log_$PID.txt # 写入表头 echo 时间 PID 虚拟内存(KB) 物理内存(KB) 内存占比(%) \$OUTPUT while true; do # 提取当前时间和内存数据 TIME\$(date %Y-%m-%d %H:%M:%S) MEM_INFO\$(ps -p \$PID -o pid,vsize,rss,%mem --no-headers) echo \$TIME \$MEM_INFO \$OUTPUT sleep \$INTERVAL done EOF # 2. 赋予执行权限并运行 chmod x monitor_mem.sh ./monitor_mem.sh [PID] # 替换[PID]为进程号按CtrlC停止 # 3. 查看记录的内存趋势用grep/awk分析 cat mem_log_$PID.txt | grep -E 时间|2024-05-20 10: # 查看指定时间段的数据四、实战排查进程内存泄漏bash# 步骤1启动监控脚本记录内存变化 ./monitor_mem.sh 1234 # 后台运行PID1234 # 步骤2运行一段时间后停止监控按CtrlC # 步骤3分析内存趋势是否持续增长 awk {print $3, $4, $5} mem_log_1234.txt | tail -20 # 查看最后20条记录 # 若“物理内存(KB)”持续增长且不释放可能存在内存泄漏核心命令总结场景命令实时监控进程内存top -p [PID]查看内存模块分布pmap -x [PID]sort -k3 -nr记录内存历史趋势./monitor_mem.sh [PID]快速查看内存关键指标cat /proc/[PID]/statusgrep Vm