free -h
top
htop
vmstat -s
ps aux --sort=-%mem | head -n 10
# 监控内存变化
watch -n 1 'free -h'
# 检查/proc/meminfo
cat /proc/meminfo
# 检查slab内存使用
cat /proc/slabinfo
valgrind
检测内存泄漏:
bash
valgrind --leak-check=full your_application
pmap
查看进程内存映射:
bash
pmap -x <PID>
bash
dmesg | grep -i memory
bash
sync; echo 1 > /proc/sys/vm/drop_caches # 释放页缓存
sync; echo 2 > /proc/sys/vm/drop_caches # 释放dentries和inodes
sync; echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存
# 调整swappiness (0-100, 默认60)
echo 10 > /proc/sys/vm/swappiness
# 调整overcommit策略
echo 1 > /proc/sys/vm/overcommit_memory
sar
收集系统活动报告:
bash
sar -r 1 3 # 监控内存使用
Prometheus
+ Grafana
或Zabbix
进行长期监控# 创建cgroup
cgcreate -g memory:mygroup
# 设置内存限制为1GB
echo 1G > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
# 将进程加入cgroup
cgclassify -g memory:mygroup <PID>
# 编辑/etc/sysctl.conf添加以下参数
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 应用配置
sysctl -p
smem - 提供更详细的内存使用报告
smem -s pss -r
memleak (BCC工具) - 检测内核内存泄漏
/usr/share/bcc/tools/memleak -p <PID>
perf - 性能分析工具
perf stat -e 'kmem:*' -a sleep 10
通过以上方法,您可以有效诊断和解决Linux系统中的内存过高和泄漏问题。对于生产环境,建议先在小范围测试任何调整,并确保有完整的回滚方案。