在 Debian(以及大多数 Linux 发行版)上,“进程占用内存过高”通常可以从确认问题 → 定位进程 → 分析原因 → 处理解决四个步骤来做。下面给你一套实用思路。
free -h
或
top
关注:
Mem 的 used vs availablebuff/cache 高不一定是问题(可被回收)ps aux --sort=-%mem | head
或
htop
字段说明:
cat /proc/<PID>/status | grep Vm
ls -l /proc/<PID>/fd
ps -T -p <PID>
表现:内存随时间持续增长,不释放
✅ 解决:
-Xmx)例如:
innodb_buffer_pool_size 太大✅ 解决:
示例(MySQL):
SET GLOBAL innodb_buffer_pool_size = 512M;
free -h
如果 buff/cache 高但 available 也高 → 正常
✅ 可手动释放(不推荐生产环境频繁做):
sync && echo 3 > /proc/sys/vm/drop_caches
查看是否发生过 OOM:
dmesg | grep -i oom
✅ 处理:
创建 swap 示例:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
docker stats
✅ 解决:
docker run -m 512m ...
示例(systemd 限制内存):
[Service]
MemoryMax=512M
你可以补充:
free -h 和 ps aux 的输出我可以直接帮你分析并给出针对性方案。