1. 快速定位问题进程
bash
top -o %MEM 按内存占用排序显示进程
htop 更直观的交互式查看器(需安装)
ps -eo pid,comm,%mem sort -%mem | head -n 10 显示内存TOP10进程
2. 关键指标分析
3. 高级内存诊断
bash
按用户统计内存
*em -u
生成内存快照对比
mkdir memsnap && cd memsnap
ps aux > ps_$(date +%s).log
free -h > free_$(date +%s).log
间隔30秒再次记录
sleep 30 && ps aux >> ps_$(date +%s).log && free -h >> free_$(date +%s).log
4. 内存泄漏检测
bash
监控指定进程的内存变化
watch -n 1 'ps -p
使用valgrind检测(需安装)
valgrind leak-check=full show-leak-kinds=all ./your_program
5. 系统级排查
bash
查看slab内存占用
sudo slabtop -o
检查共享内存
ipcs -m
查看内存映射
sudo pmap -x
分析/proc内存信息
cat /proc/meminfo | grep -E '^(MemTotal|MemFree|Cached|Slab|SReclaimable)'
6. 应急处理措施
bash
临时释放缓存
sync && echo 3 > /proc/sys/vm/drop_caches
杀死异常进程
sudo kill -9
设置内存限制
ulimit -v
7. 深度分析工具
8. 长期监控方案
bash
安装sysstat
sudo apt-get install sysstat
配置sar内存监控
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo systemctl restart sysstat
常见原因与解决方案:
1. 文件描述符泄漏
2. JVM堆内存溢出
3. 内存型数据库(如Redis)失控
4. 容器内存泄漏
bash
docker stats no-stream
docker exec -it
5. 内核模块问题
建议后续预防:
1. 配置监控告警(如Prometheus + Grafana)
2. 使用cgroup限制进程内存
3. 定期进行压力测试
4. 开启核心转储功能
5. 使用AddressSanitizer编译关键程序
如果问题持续出现,建议:
1. 保存完整系统状态:
bash
sudo sysctl -a > sysctl.conf
sudo dmesg > dmesg.log
sudo journalctl -b > journal.log
2. 使用 `crash` 工具分析vmcore
3. 联系应用开发者提供最小复现代码
版权声明: 知妳网保留所有权利,部分内容为网络收集,如有侵权,请联系QQ793061840删除,添加请注明来意。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态