1. 调整工作进程与连接数
auto可自动匹配),避免过多进程导致内存竞争。例如,4核CPU设置为worker_processes 4;。events块中配置:worker_connections 1024;。worker_cpu_affinity 0001 0010 0100 1000;(4核场景)。2. 优化缓冲区配置
client_body_buffer_size(默认16KB,可根据请求体大小调整,如8KB)和large_client_header_buffers(默认4个16KB缓冲区,调整为4个8KB),避免大请求占用过多内存。配置示例:client_body_buffer_size 8k;
large_client_header_buffers 4 8k;
proxy_buffers(每个连接的缓冲区数量与大小,如proxy_buffers 8 16k;)和fastcgi_buffers,避免代理大响应时内存激增。3. 启用高效传输与压缩
sendfile on;(零拷贝传输,减少内核态与用户态拷贝)和tcp_nopush on;(配合sendfile批量发送数据包),提升传输效率。gzip on;,设置gzip_comp_level 5(平衡压缩率与CPU消耗)和gzip_types(针对文本类型,如CSS/JS/HTML),减少传输数据量,间接降低内存占用。4. 静态资源缓存
expires(如30天)和Cache-Control,减少重复请求对Nginx内存的压力。配置示例:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off; # 关闭静态资源访问日志
}
proxy_cache_path(如proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;),缓存后端响应,减少重复请求的内存消耗。1. 文件描述符限制
/etc/security/limits.conf,增加Nginx进程的最大文件描述符数(避免高并发时超出限制):* soft nofile 65535
* hard nofile 65535
/etc/sysctl.conf中调整内核参数,优化TCP连接处理:fs.file-max = 10000000 # 系统最大文件描述符数
net.core.somaxconn = 65535 # 监听队列长度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
net.ipv4.tcp_tw_reuse = 1 # 重用TIME_WAIT连接
应用配置:sysctl -p。2. 内存管理参数
swappiness(虚拟内存交换倾向,0-100),降低到10(避免频繁交换导致性能下降):echo 10 > /proc/sys/vm/swappiness
永久生效:添加到/etc/sysctl.conf。1. 使用Cgroups限制内存
mkdir /sys/fs/cgroup/memory/nginx
echo 1000000000 > /sys/fs/cgroup/memory/nginx/memory.limit_in_bytes # 1GB
echo $(pgrep -f nginx) > /sys/fs/cgroup/memory/nginx/cgroup.procs
2. 优化高内存消耗功能
client_max_body_size(默认1MB)限制客户端上传文件大小(如10MB),避免大文件上传占用过多内存:client_max_body_size 10m;
autoindex、gzip_static),减少内存占用。3. 应急重启与连接限制
limit_conn模块限制每个IP的并发连接数(如20),防止恶意请求占用内存:limit_conn_zone $binary_remote_addr zone=perip:10m;
location / {
limit_conn perip 20;
}
nginx -s reload)释放内存,若内存泄漏则强制重启(systemctl restart nginx)。1. 排查内存占用
top(-p $(pgrep nginx | tr '\n' ','))或ps(ps -o pid,rss,command -p $(pgrep nginx))查看Nginx进程的内存占用(RSS列)。pmap分析单个进程的内存分布(如pmap -x $(pgrep nginx | head -n1)),定位内存占用高的模块。2. 监控与报警
3. 内存泄漏检测
error_log /var/log/nginx/error.log debug;),分析内存分配日志。valgrind工具检测内存泄漏(仅测试环境):valgrind --leak-check=full --show-leak-kinds=all /usr/sbin/nginx -g "daemon off;"
通过以上策略,可从配置、系统、监控三个层面系统性优化CentOS下Nginx的内存使用,提升服务稳定性与性能。优化后需通过压力测试(如wrk、ab)验证效果,并根据实际流量调整参数。