Worker进程是Nginx处理请求的核心单元,合理配置可避免内存过度占用:
auto让Nginx自动适配),充分利用多核资源且避免过多进程竞争内存。例如:worker_processes auto;events { worker_connections 1024; }epoll事件模型(高效处理高并发),减少内存消耗。配置路径:events { use epoll; }缓冲区用于临时存储请求/响应数据,过大会浪费内存,过小会影响性能。需根据实际业务调整:
client_body_buffer_size(请求体,默认8k/16k)、client_header_buffer_size(请求头,默认1k)、large_client_header_buffers(大型请求头,默认4×8k)。示例:client_body_buffer_size 8k; client_header_buffer_size 4k; large_client_header_buffers 4 8k;proxy_buffer_size(代理响应头,默认内存页大小)、proxy_buffers(代理响应内容,默认8×内存页大小)、proxy_busy_buffers_size(高负载时响应缓冲区)。示例:proxy_buffer_size 4k; proxy_buffers 8 16k; proxy_busy_buffers_size 32k;ssl_buffer_size(默认16k,减少到8k可降低SSL握手内存开销)。示例:ssl_buffer_size 8k;gzip on; gzip_comp_level 6; gzip_types text/plain application/json text/css application/javascript;(平衡压缩率与CPU消耗)sendfile和tcp_nopush减少内核态与用户态的数据拷贝,提升静态文件传输效率。配置示例:sendfile on; tcp_nopush on;proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; location / { proxy_cache my_cache; proxy_pass http://backend; }长连接会持续占用内存,合理设置超时可加速内存释放:
keepalive_timeout 30s;keepalive_requests 100;client_header_timeout(请求头读取超时)、client_body_timeout(请求体读取超时)、send_timeout(响应发送超时),均设置为10s左右(避免长时间等待)。示例:client_header_timeout 10s; client_body_timeout 10s; send_timeout 10s;/etc/sysctl.conf,优化TCP内存管理和回收策略。关键参数:net.ipv4.tcp_tw_reuse = 1(重用TIME_WAIT连接)、net.ipv4.tcp_fin_timeout = 30(缩短FIN超时时间)、vm.swappiness = 10(减少交换分区使用,优先回收内存)。修改后执行sysctl -p生效。/var/cache/nginx)和日志(/var/log/nginx),避免磁盘空间耗尽导致内存压力。示例命令:sudo rm -rf /var/cache/nginx/*; sudo rm -f /var/log/nginx/*.logstub_status模块监控Nginx内存使用情况(需允许本地访问)。配置示例:location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }(访问http://服务器IP/nginx_status查看)HUP信号重新加载配置,释放旧进程内存。示例:0 0 * * * /usr/sbin/nginx -s reload(每天凌晨重启)以上措施需根据服务器硬件配置(CPU、内存)、业务负载(并发量、请求类型)逐步调整,并通过监控工具(如htop、nginx_status)观察内存变化,找到最优配置。