Nginx 本身默认不会“主动吃满”内存,如果你在 Debian 上看到 nginx 占满内存,通常不是 nginx 本身设计问题,而是配置、模块、后端或系统环境导致的。下面按最常见原因 → 排查方法 → 解决建议来说明。
nginx 是多进程模型:
master process
├─ worker process
├─ worker process
├─ ...
如果:
worker_processes 设置过多就会“看起来 nginx 占满内存”。
检查:
ps aux --sort=-rss | head
典型异常:
nginx 45% mem
nginx 45% mem
nginx 45% mem
解决:
worker_processes auto; # 推荐
worker_rlimit_nofile 65535;
缓存会常驻内存或磁盘 inode。
常见问题:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:500m;
500m 只是 key 区解决:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:100m max_size=1g inactive=10m;
nginx 只是代理:
用户 → nginx → php-fpm → 数据库
如果:
你会看到 nginx 占内存高,其实是连接堆积。
检查:
netstat -antp | grep nginx
ps aux | grep php
解决:
fastcgi_read_timeoutworker_connections以下模块极易吃内存:
nginx-rtmp-modulelua-nginx-module(OpenResty)naxsi排查:
nginx -V
如果看到 lua / rtmp / waf,高度怀疑。
Linux 会:
检查真实可用内存:
free -h
如果:
Mem: total used free shared buff/cache
buff/cache 很大 → 不是 nginx 问题
top -o %MEM
ps aux | grep nginx
ss -ant | wc -l
nginx -T
dmesg | tail
journalctl -u nginx
| 现象 | 原因 |
|---|---|
| nginx 多个进程各占 30%+ | worker 太多 / 缓存大 |
| 内存慢慢涨不降 | 后端连接未释放 |
| 重启 nginx 就正常 | 缓存 / 连接堆积 |
| OOM 杀 nginx | worker_connections 过大 |
cat /etc/os-release)nginx -v)php-fpm / java / nodecache / lua / rtmpfree -h 输出我可以直接帮你改配置。