在 CentOS(以及其他 Linux 发行版)上,进程占用内存过高通常不是单一原因,而是几类常见情况叠加。下面按“最常见 → 较少见”给你系统梳理一下,并附上排查思路。
✅ 排查:
ps -eo pid,comm,rss,vsz --sort=-rss | head
✅ 特征:
Linux 会主动用空闲内存做:
⚠️ 这是正常的,不是进程问题
✅ 查看真实可用内存:
free -h
cat /proc/meminfo
重点看:
MemAvailableBuffers / Cached常见“吃内存”的服务:
yum / dnfsystemd-journaldrsyslogauditdfirewalld✅ 检查:
systemctl status <服务名>
journalctl -u <服务名>
✅ 查看:
swapon -s
vm.overcommit_memoryvm.min_free_kbytesulimit 限制✅ 示例:
sysctl vm.overcommit_memory
ulimit -a
✅ 查看线程数:
ps -eLf | wc -l
top
# 或
htop
cat /proc/<PID>/status
关注:
watch -n 5 'ps -p <PID> -o rss'
gdb -p <PID>
| 场景 | 原因 |
|---|---|
| Java 进程占 4G+ | JVM 堆设置过大 |
| mysqld 占内存高 | 查询缓存 / 连接数 |
| php-fpm 爆内存 | 子进程数过多 |
| java 重启后正常 | 内存泄漏 |
| 系统卡死 | swap 没开 |
请补充:
我可以帮你 直接判断是“正常占用”还是“异常问题”。