伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx高并發場景下的性能調優技巧

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2025-09-02 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nginx高并發場景下的性能調優與架構設計:從入門到實戰的完整指南

引言:為什么你需要掌握Nginx性能調優?

在一次雙十一大促中,我們的電商平臺在活動開始后3分鐘內涌入了800萬用戶,QPS瞬間飆升到50萬。就在所有人都捏著一把汗的時候,經過優化的Nginx集群穩穩地扛住了這波流量沖擊,CPU使用率始終保持在60%以下。

這就是Nginx性能調優的威力。

如果你正在面臨以下問題:

? 網站訪問量激增時頻繁出現502/504錯誤

? Nginx CPU占用率居高不下,但QPS卻上不去

? 不知道如何設計高可用的Nginx架構

? 想要榨干服務器性能,但不知從何下手

那么這篇文章將幫你徹底解決這些問題。我將分享過去5年在大廠處理千萬級并發的實戰經驗,包括那些踩過的坑和獨家優化技巧。

一、性能基準測試:知己知彼

在開始優化之前,我們需要先了解當前系統的性能基線。很多人一上來就調參數,這是典型的錯誤做法。

1.1 壓測工具選擇與使用

# 使用wrk進行基準測試
wrk -t12 -c400 -d30s --latency http://your-domain.com/

# 使用ab進行簡單測試
ab -n 100000 -c 1000 http://your-domain.com/

# 使用vegeta進行更精準的測試
echo"GET http://your-domain.com/"| vegeta attack -duration=30s -rate=10000 | vegeta report

實戰技巧:壓測時要監控以下關鍵指標:

? QPS/TPS

? 響應時間分布(P50、P95、P99)

? 錯誤率

? CPU/內存/網絡/磁盤IO使用率

1.2 性能瓶頸定位

通過我的經驗,Nginx性能瓶頸通常出現在這幾個地方:

1.連接數限制:系統默認的文件描述符限制

2.CPU瓶頸:worker進程數配置不當

3.內存瓶頸:緩沖區設置不合理

4.網絡IO瓶頸:網卡中斷處理不均衡

5.磁盤IO瓶頸:日志寫入拖慢整體性能

二、系統層面優化:打好地基

2.1 內核參數優化

這是我在生產環境使用的一套優化參數,可以直接復制使用:

# /etc/sysctl.conf

# 系統級別最大文件句柄數
fs.file-max = 2000000
fs.nr_open = 2000000

# 網絡優化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

# TCP緩沖區優化
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 262144 16777216
net.ipv4.tcp_wmem = 4096 262144 16777216

# 連接跟蹤表優化
net.netfilter.nf_conntrack_max = 1000000
net.nf_conntrack_max = 1000000
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

# BBR擁塞控制算法(內核4.9+)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

關鍵點解析

?tcp_tw_reuse:允許TIME_WAIT套接字重用,對于高并發短連接場景效果顯著

?somaxconn:決定了Nginx的backlog上限,必須調大

? BBR算法:Google開發的擁塞控制算法,在高延遲網絡下性能提升明顯

2.2 文件描述符限制

# /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
* softnproc1000000
* hardnproc1000000

# 對于systemd管理的服務,還需要修改
# /etc/systemd/system/nginx.service.d/override.conf
[Service]
LimitNOFILE=1000000
LimitNPROC=1000000

三、Nginx配置優化:核心調優

3.1 全局配置優化

# nginx.conf

usernginx;
# worker進程數建議設置為CPU核心數
worker_processesauto;
# 每個worker進程最大連接數
worker_rlimit_nofile1000000;

# 綁定worker進程到指定CPU核心,減少CPU切換開銷
worker_cpu_affinityauto;

# 錯誤日志級別設置為error,減少IO
error_log/var/log/nginx/error.logerror;

events{
 # 使用epoll事件驅動模型(Linux)
 useepoll;
 
 # 每個worker進程的最大連接數
 worker_connections65535;
 
 # 開啟高效文件傳輸模式
 multi_accepton;
 
 # 優化同一時刻只有一個請求的問題
 accept_mutexoff;
}

http{
 # 基礎優化
 sendfileon;
 tcp_nopushon;
 tcp_nodelayon;
 
 # 連接超時優化
 keepalive_timeout65;
 keepalive_requests10000;
 reset_timedout_connectionon;
 client_body_timeout10;
 client_header_timeout10;
 send_timeout10;
 
 # 緩沖區優化
 client_body_buffer_size128k;
 client_max_body_size10m;
 client_header_buffer_size1k;
 large_client_header_buffers48k;
 output_buffers32128k;
 postpone_output1460;
 
 # 文件緩存優化
 open_file_cachemax=200000inactive=20s;
 open_file_cache_valid30s;
 open_file_cache_min_uses2;
 open_file_cache_errorson;
 
 # Gzip壓縮優化
 gzipon;
 gzip_min_length1k;
 gzip_buffers1664k;
 gzip_http_version1.1;
 gzip_comp_level6;
 gzip_typestext/plain application/javascript application/x-javascript text/css application/xml text/javascript;
 gzip_varyon;
 gzip_proxiedany;
 gzip_disable"MSIE [1-6].";
 
 # 隱藏版本號
 server_tokensoff;
 
 # 優化請求頭哈希表
 server_names_hash_bucket_size128;
 server_names_hash_max_size512;
 
 # 日志優化
 access_log/var/log/nginx/access.log main buffer=32kflush=5s;
}

3.2 上游服務器配置優化

upstreambackend {
 # 使用least_conn負載均衡算法(最少連接數)
  least_conn;
 
 # 啟用長連接池
 keepalive300;
 keepalive_requests10000;
 keepalive_timeout60s;
 
 # 后端服務器配置
 serverbackend1.example.com:8080max_fails=2fail_timeout=10sweight=5;
 serverbackend2.example.com:8080max_fails=2fail_timeout=10sweight=5;
 serverbackend3.example.com:8080max_fails=2fail_timeout=10sweight=5backup;
 
 # 添加健康檢查(需要nginx_upstream_check_module)
 checkinterval=3000rise=2fall=3timeout=1000type=http;
 check_http_send"HEAD /health HTTP/1.0

";
 check_http_expect_alivehttp_2xx http_3xx;
}

server{
 listen80default_server reuseport;
 listen[::]:80default_server reuseport;
 server_name_;
 
 location/ {
   proxy_passhttp://backend;
   
   # 代理優化配置
   proxy_http_version1.1;
   proxy_set_headerConnection"";
   proxy_connect_timeout10s;
   proxy_send_timeout10s;
   proxy_read_timeout10s;
   
   # 緩沖區優化
   proxy_bufferingon;
   proxy_buffer_size4k;
   proxy_buffers324k;
   proxy_busy_buffers_size64k;
   proxy_temp_file_write_size64k;
   
   # 請求頭設置
   proxy_set_headerHost$host;
   proxy_set_headerX-Real-IP$remote_addr;
   proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
   proxy_set_headerX-Forwarded-Proto$scheme;
   
   # 緩存配置
   proxy_cache_bypass$http_upgrade;
   proxy_no_cache$http_upgrade;
  }
}

3.3 靜態資源優化

location~* .(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)${
 # 設置過期時間
 expires30d;
 add_headerCache-Control"public, immutable";
 
 # 開啟零拷貝
 sendfileon;
 tcp_nopushon;
 
 # 關閉訪問日志
 access_logoff;
 
 # 防盜鏈
 valid_referersnoneblockedserver_names ~.google. ~.baidu. ~.bing.;
 if($invalid_referer) {
   return403;
  }
}

四、高級優化技巧

4.1 緩存策略優化

# 定義緩存路徑和配置
proxy_cache_path/var/cache/nginx levels=1:2keys_zone=my_cache:100mmax_size=10ginactive=60muse_temp_path=off;

server{
 location/api/ {
   # 緩存鍵設置
   proxy_cache_key"$scheme$request_method$host$request_uri$is_args$args";
   proxy_cachemy_cache;
   
   # 針對不同響應碼設置不同緩存時間
   proxy_cache_valid20030210m;
   proxy_cache_valid4041m;
   proxy_cache_validany1m;
   
   # 緩存鎖,防止緩存擊穿
   proxy_cache_lockon;
   proxy_cache_lock_timeout5s;
   
   # 允許使用過期緩存
   proxy_cache_use_staleerrortimeout updating http_500 http_502 http_503 http_504;
   
   # 添加緩存狀態頭
   add_headerX-Cache-Status$upstream_cache_status;
   
   # 緩存預熱和更新
   proxy_cache_background_updateon;
   proxy_cache_revalidateon;
  }
}

4.2 限流配置

# 定義限流區域
limit_req_zone$binary_remote_addrzone=perip:10mrate=10r/s;
limit_req_zone$server_namezone=perserver:10mrate=1000r/s;
limit_conn_zone$binary_remote_addrzone=connperip:10m;

server{
 # IP限流
 limit_reqzone=perip burst=20delay=10;
 
 # 連接數限制
 limit_connconnperip10;
 
 # 限流白名單
 geo$limit_whitelist{
   default0;
    10.0.0.0/8 1;
    192.168.0.0/16 1;
  }
 
 map$limit_whitelist$limit_req_key{
    0 $binary_remote_addr;
    1 "";
  }
}

4.3 SSL/TLS優化

server{
 listen443ssl http2 reuseport;
 
 # SSL證書配置
 ssl_certificate/path/to/cert.pem;
 ssl_certificate_key/path/to/key.pem;
 
 # SSL優化
 ssl_protocolsTLSv1.2TLSv1.3;
 ssl_ciphersECDHE-RSA-AES128-GCM-SHA256!aNULL!RC4:!DHE;
 ssl_prefer_server_cipherson;
 
 # SSL會話緩存
 ssl_session_cacheshared50m;
 ssl_session_timeout1d;
 ssl_session_ticketsoff;
 
 # OCSP裝訂
 ssl_staplingon;
 ssl_stapling_verifyon;
 ssl_trusted_certificate/path/to/chain.pem;
 
 # HSTS
 add_headerStrict-Transport-Security"max-age=31536000; includeSubDomains"always;
}

五、高可用架構設計

5.1 主備架構

# keepalived配置示例
vrrp_scriptcheck_nginx {
 script"/usr/local/bin/check_nginx.sh"
  interval2
  weight -5
  fall3
  rise2
}

vrrp_instance VI_1 {
 stateMASTER
  interface eth0
  virtual_router_id51
  priority100
  advert_int1
  authentication {
   auth_typePASS
    auth_pass1234
  }
  virtual_ipaddress {
    192.168.1.100
  }
 track_script{
   check_nginx
  }
}

5.2 負載均衡架構

在超高并發場景下,我通常采用四層+七層負載均衡的架構:

Internet
  ↓
LVS/F5 (四層負載均衡)
  ↓
Nginx集群 (七層負載均衡)
  ↓
應用服務器集群

這種架構的優勢:

? LVS處理能力強,可達千萬級并發

? Nginx提供靈活的七層負載均衡和緩存

? 雙層負載均衡提供更好的高可用性

5.3 動靜分離架構

# CDN回源配置
location~* .(jpg|jpeg|png|gif|ico|css|js)${
 # 設置CDN回源頭
 add_headerCache-Control"public, max-age=31536000";
 
 # 回源鑒權
 set$auth_token"";
 if($http_x_cdn_auth="your-secret-token") {
   set$auth_token"valid";
  }
 if($auth_token!="valid") {
   return403;
  }
}

# 動態請求處理
location/api/ {
 proxy_passhttp://backend;
 # 禁用緩存
 add_headerCache-Control"no-cache, no-store, must-revalidate";
}

六、監控與故障排查

6.1 性能監控

# 開啟stub_status模塊
location/nginx_status {
 stub_statuson;
 access_logoff;
 allow127.0.0.1;
 denyall;
}

# 開啟VTS模塊獲取詳細統計
location/status {
  vhost_traffic_status_display;
 vhost_traffic_status_display_formathtml;
 allow127.0.0.1;
 denyall;
}

6.2 日志分析

# 分析訪問最多的IP
awk'{print $1}'access.log |sort|uniq-c |sort-rn |head-10

# 分析響應時間
awk'{print $NF}'access.log |sort-n | awk'{
  count[NR] = $1;
  sum += $1
}
END {
  print "Average:", sum/NR;
  print "P50:", count[int(NR*0.5)];
  print "P95:", count[int(NR*0.95)];
  print "P99:", count[int(NR*0.99)];
}'

# 實時監控錯誤日志
tail-f error.log | grep -E"error|alert|crit"

6.3 性能分析工具

# 使用nginx-amplify進行監控
curl -L -O https://github.com/nginxinc/nginx-amplify-agent/raw/master/packages/install.sh
sh ./install.sh

# 使用ngxtop實時分析
ngxtop -l /var/log/nginx/access.log

# 使用goaccess生成報表
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

七、實戰案例分析

案例1:電商大促扛住百萬QPS

背景:某電商平臺雙十一活動,預計QPS峰值100萬

解決方案

1. 部署20臺Nginx服務器,每臺配置32核64G

2. 使用LVS做四層負載均衡

3. 靜態資源全部推送到CDN

4. 熱點數據使用Redis緩存

5. 配置限流,防止惡意請求

優化結果

? 實際峰值QPS:120萬

? 平均響應時間:50ms

? P99響應時間:200ms

? 錯誤率:0.01%

案例2:API網關性能優化

背景:微服務架構下,API網關成為性能瓶頸

優化措施

# 使用Lua腳本進行動態路由
location/api {
 set$backend'';
 rewrite_by_lua_block{
   localroutes = {
      ["/api/user"] = "http://user-service",
      ["/api/order"] = "http://order-service",
      ["/api/product"] = "http://product-service"
    }
   
   forpattern, backend in pairs(routes) do
      if ngx.re.match(ngx.var.uri, pattern) then
        ngx.var.backend = backend
       break
      end
    end
  }
 
  proxy_pass$backend;
}

優化效果

? QPS提升300%

? 延遲降低60%

? CPU使用率降低40%

八、常見問題與解決方案

8.1 502 Bad Gateway

常見原因

1. 后端服務器宕機

2. 連接超時設置過短

3. 緩沖區設置過小

解決方案

# 增大超時時間
proxy_connect_timeout30s;
proxy_send_timeout30s;
proxy_read_timeout30s;

# 增大緩沖區
proxy_buffer_size64k;
proxy_buffers3232k;
proxy_busy_buffers_size128k;

8.2 504 Gateway Timeout

解決方案

# 優化超時配置
proxy_read_timeout300s;
fastcgi_read_timeout300s;

# 啟用長連接
upstreambackend {
 serverbackend1.example.com:8080;
 keepalive32;
}

8.3 內存占用過高

優化策略

1. 減少worker進程數

2. 優化緩沖區大小

3. 限制請求體大小

4. 定期重載配置釋放內存

九、性能測試對比

我對比測試了優化前后的性能數據:

指標 優化前 優化后 提升比例
QPS 5,000 50,000 10倍
P50延遲 200ms 20ms 90%
P99延遲 2000ms 100ms 95%
CPU使用率 90% 40% 55%
內存使用 8GB 4GB 50%
錯誤率 1% 0.01% 99%

十、進階優化方向

10.1 使用OpenResty

OpenResty可以讓你使用Lua腳本擴展Nginx功能:

-- 限流腳本示例
locallimit_req =require"resty.limit.req"
locallim, err = limit_req.new("my_limit_req_store",200,100)

ifnotlimthen
  ngx.log(ngx.ERR,"failed to instantiate a resty.limit.req object: ", err)
 returnngx.exit(500)
end

localkey = ngx.var.binary_remote_addr
localdelay, err = lim:incoming(key,true)

ifnotdelaythen
 iferr =="rejected"then
   returnngx.exit(503)
 end
  ngx.log(ngx.ERR,"failed to limit req: ", err)
 returnngx.exit(500)
end

10.2 HTTP/3 QUIC支持

# 編譯時添加QUIC支持
./configure--with-http_v3_module --with-http_quic_module

# 配置HTTP/3
server {
 listen443http3 reuseport;
 listen443ssl http2;
 
 ssl_protocolsTLSv1.3;
 add_headerAlt-Svc'h3=":443"; ma=86400';
}

總結與建議

通過本文的優化方案,你應該能夠:

1.系統層面:內核參數調優,提升系統處理能力

2.Nginx配置:精細化配置,榨干每一分性能

3.架構設計:構建高可用、可擴展的架構

4.監控運維:建立完善的監控體系

5.故障處理:快速定位和解決問題

最后的建議

? 優化要循序漸進,每次只改一個參數

? 建立性能基準,量化優化效果

? 生產環境改動要先在測試環境驗證

? 保持配置文件的版本管理

? 定期review和更新優化策略

記住,性能優化沒有銀彈,需要根據實際場景不斷調整。但掌握了這些核心技巧,你就能應對99%的高并發挑戰。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11310

    瀏覽量

    225624
  • 集群
    +關注

    關注

    0

    文章

    149

    瀏覽量

    17681
  • nginx
    +關注

    關注

    0

    文章

    189

    瀏覽量

    13184

原文標題:Nginx高并發場景下的性能調優與架構設計:從入門到實戰的完整指南

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    史上最全性能調總結

    在說什么是性能調之前,我們先來說一,計算機的體系結構。
    的頭像 發表于 05-13 08:57 ?7334次閱讀
    史上最全<b class='flag-5'>性能</b><b class='flag-5'>調</b><b class='flag-5'>優</b>總結

    HBase性能調概述

    HBase性能調
    發表于 07-03 11:35

    基于全HDD aarch64服務器的Ceph性能調實踐總結

    ,磁盤的性能得到了成倍的提升,如下圖。網絡帶寬也成倍增長。所以,我們可以基于不同的測試場景,不同的塊大小,去選擇升級磁盤和網絡設備來提升性能。當然,TCO也是需要考慮的。4.2 Ceph軟件層面
    發表于 07-05 14:26

    并發性能調是在技術進階賽道變得厲害的加分項

    并發性能調,一定是你在技術進階賽道變得牛逼的加分項。不論,你是開發,架構還是管理崗,亦或者是其他互聯網相關崗位。因為毫不夸張的說,在現在動輒過千萬級的
    的頭像 發表于 09-18 10:39 ?1842次閱讀

    解密并發業務場景典型的秒殺系統的架構

    中,就更別提如何構建并發系統了! 究竟什么樣的系統算是并發系統?今天,我們就一起解密并發
    的頭像 發表于 11-17 10:32 ?3126次閱讀
    解密<b class='flag-5'>高</b><b class='flag-5'>并發</b>業務<b class='flag-5'>場景</b><b class='flag-5'>下</b>典型的秒殺系統的架構

    為什么Nginx可以支持并發

    先說答案,Nginx之所以支持并發,是因為它是基于epoll的異步及非阻塞的事件驅動模型。 在這個模型,Nginx服務端可以同一時間接收
    的頭像 發表于 02-13 10:48 ?2397次閱讀

    什么場景需要jvm調

    JVM調是指對Java虛擬機進行性能優化和資源管理,以提高應用程序的運行效率和吞吐量。JVM調場景
    的頭像 發表于 12-05 11:14 ?2297次閱讀

    鴻蒙開發實戰:【性能調組件】

    性能調組件包含系統和應用調框架,旨在為開發者提供一套性能
    的頭像 發表于 03-13 15:12 ?1465次閱讀
    鴻蒙開發實戰:【<b class='flag-5'>性能</b><b class='flag-5'>調</b><b class='flag-5'>優</b>組件】

    手把手教你如何調Linux網絡參數

    并發網絡服務場景中,Linux內核的默認網絡參數往往無法滿足需求,導致性能瓶頸、連接超時甚至服務崩潰。本文基于真實案例分析,從參數解讀、問題診斷到優化實踐,手把手教你如何
    的頭像 發表于 05-29 09:21 ?1126次閱讀

    Nginx在企業環境中的調策略

    Nginx作為現代互聯網架構中最重要的Web服務器和反向代理服務器,其性能調對企業級應用的穩定性和效率至關重要。本指南將從運維實踐角度出發,詳細介紹
    的頭像 發表于 07-14 11:13 ?730次閱讀

    Linux網絡性能調方案

    在當今并發、大流量的互聯網環境,網絡性能往往成為系統的瓶頸。作為一名資深運維工程師,我在生產環境中遇到過無數次因為TCP/IP參數配置不當導致的
    的頭像 發表于 08-06 18:01 ?1456次閱讀

    Nginx并發優化方案

    作為一名在生產環境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享一套完整的Nginx并發優化方案,幫
    的頭像 發表于 08-13 15:51 ?1151次閱讀

    Linux系統內核參數調實戰指南

    Linux 內核參數調是系統性能優化的核心環節。隨著云原生架構的普及和硬件性能的飛速提升,默認的內核參數配置往往無法充分發揮系統潛力。在
    的頭像 發表于 01-28 14:27 ?602次閱讀

    Ingress Nginx性能調配置方案

    Ingress Nginx 是 Kubernetes 集群中最主流的流量入口組件,承擔著集群內所有 HTTP/HTTPS 流量的路由和轉發。默認配置能應付開發測試環境,但一到生產環境扛并發,各種
    的頭像 發表于 02-24 11:50 ?231次閱讀

    Nginx并發連接調實戰手冊

    Nginx 的高性能源自其事件驅動架構。與 Apache 的"每連接一線程"模型不同,Nginx 使用單線程事件循環處理數千個并發連接。理解這套架構是
    的頭像 發表于 03-16 15:28 ?290次閱讀