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)限制客戶端上傳文件大?。ㄈ?0MB),避免大文件上傳占用過多內存: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)驗證效果,并根據實際流量調整參數。