专注云服务商活动
网站运营运维笔记

多个Linux查看进程内存占用的工具和解决策略

由于工作的需要,我们会经常去排查服务器的内存占用情况,是自身程序占用的还是外部流量占用导致的。所以我们需要一一排查,这里我们整理到一些排查的方法和工具。

第一、基础监控工具

1. top命令实时监控

top -o %MEM

按内存占用降序排列进程

关注RES(常驻内存)列和Swap列的值

使用Shift+M切换排序方式

2. ps命令精准查询

# 查看所有进程内存信息
ps auxf --sort=-%mem

# 查看特定进程内存
ps -p <PID> -o rss,vsz

字段说明:

rss:实际物理内存占用(KB)

vsz:虚拟内存大小(KB)

3. free命令全局视图

free -h关注:

Total内存总量

Used内存使用量

Swap分区状态

第二、进阶分析工具

4. pmap工具内存映射分析

pmap -x <PID>

输出包含:

线程堆栈信息

内存映射文件细节

共享内存区域统计

5. smem工具统计报告

smem -r -P java

生成报告包含:

每个进程的物理内存使用
内存共享比例
可视化图表输出(需安装graphviz)

6. proc文件系统解析

# 查看进程内存统计
cat /proc/<PID>/status | grep -E "VmSize|VmRSS"

# 内存分配详细信息
cat /proc/<PID>/smaps

第三、内存泄漏排查

1. valgrind检测工具

valgrind --leak-check=full --show-leak-kinds=all ./your_program

2. gdb堆栈跟踪

gdb -p <PID>
(gdb) p (char*)malloc(1024 * 1024)

第四、自动化监控方案

1. systemd服务监控

创建自定义单元文件:

ini

[Unit]
Description=Memory Watchdog
After=network.target

[Service]
ExecStart=/usr/bin/sh -c 'while true; do echo $(date) "Memory usage: $(free -m)"; sleep 30; done'

[Install]
WantedBy=multi-user.target

2. Prometheus + Grafana监控

部署node_exporter:

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
cd node_exporter-*/
systemctl daemon-reload
systemctl start node_exporter

第五、典型问题处理

1. 内存耗尽应急处理

# 查找占用内存最大的进程
find /proc -type f -name status -exec grep -E "^VmSize|VmRSS" {} \; | sort -k3nr

# 终止进程
kill -9 <PID>

2. 大内存进程优化建议

使用内存池技术(如jemalloc)
启用内存压缩(ZRAM)
调整OOM Killer参数:

echo 3 > /proc/sys/vm/overcommit_memory

 

投上你的一票
域名主机商优惠信息推送QQ群: 627775477 获取商家优惠推送,禁言。
赞(0)
未经允许不得转载:老左笔记 » 多个Linux查看进程内存占用的工具和解决策略