- หน้าแรก
- ตัวจำลอง CDN
- การกำหนดค่า NGINX
การกำหนดค่า NGINX
การจัดเตรียมด้วย cloud-init จะนำใช้งานการกำหนดค่า CDN edge ของ NGINX ที่ได้รับการปรับแต่งประสิทธิภาพอย่างสมบูรณ์ หน้านี้จะบันทึกทุกชั้นของการกำหนดค่า ตั้งแต่การปรับจูนเคอร์เนลไปจนถึงพฤติกรรมแคชและการฉีดเฮดเดอร์ของผู้ให้บริการ การตั้งค่าทั้งหมดได้รับการยืนยันภายใต้การทดสอบโหลดต่อเนื่อง 48 ชั่วโมงที่ยอดสูงสุด 172,540 req/s
ไฟล์การกำหนดค่า
หัวข้อที่มีชื่อว่า “ไฟล์การกำหนดค่า”| ไฟล์ | วัตถุประสงค์ |
|---|---|
/etc/sysctl.d/99-cdn-tuning.conf | การปรับจูนเครือข่ายเคอร์เนล Linux |
/etc/systemd/system/nginx.service.d/override.conf | ขีดจำกัด file descriptor สำหรับ NGINX |
/etc/security/limits.d/99-nginx.conf | ขีดจำกัดระดับ OS สำหรับผู้ใช้ www-data |
/etc/nginx/nginx.conf | การกำหนดค่าหลัก NGINX (workers, buffers, gzip, logging) |
/etc/nginx/conf.d/cdn-edge.conf | การกำหนดค่า CDN proxy (cache, upstream, headers) |
การปรับจูนเคอร์เนล
หัวข้อที่มีชื่อว่า “การปรับจูนเคอร์เนล”นำใช้งานผ่าน /etc/sysctl.d/99-cdn-tuning.conf ตอนบูต
| พารามิเตอร์ | ค่า | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|---|
net.core.somaxconn | 65535 | 4096 | ขนาดคิว listen backlog |
net.core.netdev_max_backlog | 65535 | 1000 | backlog ของแพ็กเก็ตขาเข้าต่อ CPU |
net.ipv4.tcp_max_syn_backlog | 65535 | 256 | คิวคำขอ SYN (ป้องกันการหลุดภายใต้การเพิ่มขึ้นอย่างรวดเร็ว) |
net.ipv4.tcp_tw_reuse | 1 | 2 | นำ TIME_WAIT sockets กลับมาใช้สำหรับการเชื่อมต่อขาออก |
net.ipv4.ip_local_port_range | 1024-65535 | 32768-60999 | ช่วง ephemeral port (64K เทียบกับ 28K) |
net.core.rmem_max | 16 MB | 212 KB | บัฟเฟอร์รับ socket สูงสุด |
net.core.wmem_max | 16 MB | 212 KB | บัฟเฟอร์ส่ง socket สูงสุด |
net.ipv4.tcp_rmem | 4K/87K/16M | 4K/131K/6M | บัฟเฟอร์รับต่อ socket (min/default/max) |
net.ipv4.tcp_wmem | 4K/65K/16M | 4K/16K/4M | บัฟเฟอร์ส่งต่อ socket (min/default/max) |
net.ipv4.tcp_fin_timeout | 15 | 60 | timeout FIN_WAIT_2 (ทำความสะอาด socket เร็วขึ้น) |
net.ipv4.tcp_keepalive_time | 300 | 7200 | เริ่ม keepalive probes หลังจาก idle 5 นาที |
net.ipv4.tcp_slow_start_after_idle | 0 | 1 | รักษา congestion window ให้อุ่นบนการเชื่อมต่อที่ idle |
net.ipv4.tcp_max_tw_buckets | 2000000 | ~65536 | TIME_WAIT sockets สูงสุด |
fs.file-max | 2097152 | แตกต่างกัน | ขีดจำกัด file descriptor ระดับระบบ |
vm.swappiness | 10 | 60 | ใช้ RAM มากกว่า swap สำหรับข้อมูลแคช |
การกำหนดค่าหลัก NGINX
หัวข้อที่มีชื่อว่า “การกำหนดค่าหลัก NGINX”Workers และ Connections
หัวข้อที่มีชื่อว่า “Workers และ Connections”worker_processes auto; # 4 workers on D4s_v5 (1 per vCPU)worker_rlimit_nofile 65535; # Per-worker file descriptor limit
events { use epoll; # Linux-optimized event model worker_connections 8192; # 4 workers x 8192 = 32,768 max concurrent multi_accept on; # Accept all pending connections per event loop accept_mutex off; # Not needed with epoll + reuseport}Systemd override ที่ /etc/systemd/system/nginx.service.d/override.conf ตั้งค่า LimitNOFILE=65535 ให้ตรงกัน
Proxy Buffers
หัวข้อที่มีชื่อว่า “Proxy Buffers”proxy_buffering on;proxy_buffer_size 16k; # Header buffer (handles large CDN headers)proxy_buffers 64 16k; # 1 MB per connection (64 x 16k)proxy_busy_buffers_size 256k; # Can send 256k to client while still readingขนาด busy buffer 256k มีความสำคัญ — ต้องมากกว่าการตอบสนองที่แคชขนาดใหญ่ที่สุด (Juice Shop คือ 75 KB) การตั้งค่า 64k เดิมทำให้เกิดการ serialization ภายใต้โหลด
Gzip Compression
หัวข้อที่มีชื่อว่า “Gzip Compression”gzip on;gzip_comp_level 4; # Balance: ~85% of max compression at ~40% CPUgzip_min_length 256; # Skip tiny responses (gzip header overhead)gzip_vary on; # Vary: Accept-Encoding for correct cachinggzip_proxied any; # Compress all proxied responsesgzip_types text/plain text/css text/javascript text/xml application/json application/javascript application/xml application/xml+rss application/atom+xml application/ld+json application/manifest+json image/svg+xml;Open File Cache
หัวข้อที่มีชื่อว่า “Open File Cache”open_file_cache max=200000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;แคช file descriptors และ metadata สำหรับออบเจกต์ที่แคช ช่วยขจัด syscalls stat() และ open() บนไฟล์ที่ร้อนแรง
Client Keepalive
หัวข้อที่มีชื่อว่า “Client Keepalive”keepalive_timeout 65;keepalive_requests 100000; # Was 1000 — caused connection recycling at 90K req/sที่ 90K req/s กับ keepalive_requests 1000 การเชื่อมต่อถูก recycle ทุก 11 วินาที สร้าง TIME_WAIT sockets การเพิ่มเป็น 100,000 ขจัดปัญหานี้ได้อย่างสมบูรณ์
Access Logging
หัวข้อที่มีชื่อว่า “Access Logging”log_format cdn '$remote_addr [$time_local] "$request" $status $body_bytes_sent $upstream_cache_status $request_time';access_log /var/log/nginx/access.log cdn buffer=256k flush=5s;รูปแบบล็อก cdn รวม $upstream_cache_status (HIT/MISS) และ $request_time สำหรับการวิเคราะห์ latency การบันทึกแบบบัฟเฟอร์ (256k/flush 5s) ช่วยลดค่าใช้จ่าย I/O ภายใต้โหลดสูง
Upstream Keepalive
หัวข้อที่มีชื่อว่า “Upstream Keepalive”upstream origin_backend { server 20.12.78.159:80; keepalive 256; # Persistent connections per worker to origin keepalive_timeout 60s; keepalive_requests 1000;}ด้วย 4 workers x 256 keepalive = 1,024 การเชื่อมต่อที่อุ่นแล้วไปยัง origin ร่วมกับ proxy_http_version 1.1 และ proxy_set_header Connection "" ช่วยขจัดค่าใช้จ่ายจาก TCP handshake ในทุก cache miss
การกำหนดค่าแคช
หัวข้อที่มีชื่อว่า “การกำหนดค่าแคช”Cache Path
หัวข้อที่มีชื่อว่า “Cache Path”proxy_cache_path /var/cache/nginx/cdn levels=1:2 keys_zone=cdn_cache:32m max_size=25g inactive=24h use_temp_path=off;| พารามิเตอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
keys_zone=cdn_cache:32m | shared memory 32 MB | เก็บ cache keys และ metadata ประมาณ 256,000 รายการ |
max_size=25g | ขีดจำกัดดิสก์ 25 GB | ใช้ส่วนใหญ่ของดิสก์ OS 30 GB; การขับออกแบบ LRU เมื่อถึงขีดจำกัด |
inactive=24h | timeout การไม่ใช้งาน 24 ชั่วโมง | เนื้อหาที่ไม่ได้เข้าถึงนาน 24 ชั่วโมงจะถูกขับออก (ไม่ใช่ TTL) |
use_temp_path=off | เขียนตรงไปยัง cache dir | หลีกเลี่ยงการย้ายไฟล์ข้าม filesystem |
พฤติกรรมแคช
หัวข้อที่มีชื่อว่า “พฤติกรรมแคช”proxy_cache cdn_cache;proxy_cache_valid 200 301 302 4h;proxy_cache_valid 404 1m;proxy_cache_key "$scheme$host$request_uri";proxy_cache_lock on;proxy_cache_lock_age 3s;proxy_cache_lock_timeout 3s;proxy_cache_background_update on;proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;proxy_ignore_headers Set-Cookie Cache-Control Expires Vary;
proxy_hide_header X-Cache-Status;proxy_hide_header Vary;| Directive | ค่า | วัตถุประสงค์ |
|---|---|---|
proxy_cache_valid 200 301 302 4h | TTL 4 ชั่วโมง | เนื้อหาที่แคชถูกต้องนาน 4 ชั่วโมง (เพิ่มขึ้นเพื่อลดการลดลงของ throughput จากคลื่นการรีเฟรช) |
proxy_cache_lock on | การป้องกัน thundering herd | มีเพียง 1 คำขอที่ไปยัง origin ต่อ URL ที่ยังไม่ได้แคช คำขออื่นรอการเติมแคช |
proxy_cache_lock_age 3s | timeout ของ lock | หากคำขอแรกยังไม่เสร็จสิ้นใน 3s อนุญาตให้คำขออื่นผ่านได้ |
proxy_cache_background_update on | การรีเฟรชแบบ zero-latency | ให้บริการเนื้อหาที่ล้าสมัยทันทีขณะรีเฟรชในพื้นหลัง |
proxy_cache_use_stale | ความยืดหยุ่น | ให้บริการเนื้อหาที่ล้าสมัยระหว่าง origin errors (500/502/503/504) หรือขณะอัปเดต |
proxy_ignore_headers | บังคับการแคช | ละเว้น Set-Cookie, Cache-Control, Expires, Vary ของ origin — CDN เป็นผู้กำหนด TTL และพฤติกรรม Vary (Juice Shop ส่ง max-age=0 และเฮดเดอร์ Vary สามตัวซึ่งทำให้ไม่สามารถแคชได้อย่างมีประสิทธิภาพ) |
proxy_hide_header X-Cache-Status | ซ่อนเฮดเดอร์ origin | NGINX ของ origin เพิ่ม X-Cache-Status ของตัวเอง — ซ่อนมันเพื่อให้มองเห็นเฉพาะสถานะแคชของ CDN |
proxy_hide_header Vary | ป้องกันการแตกกระจายของแคช | Origin ส่งเฮดเดอร์ Vary: Accept-Encoding หลายตัว การซ่อนพวกมันป้องกันการแตกกระจายของ cache key ข้ามวิธีการ Accept-Encoding ต่างๆ gzip_vary on ของ NGINX จะเพิ่มเฮดเดอร์ Vary เดี่ยวที่ถูกต้องโดยอัตโนมัติ |
Proxy Timeouts
หัวข้อที่มีชื่อว่า “Proxy Timeouts”proxy_read_timeout 30s;proxy_connect_timeout 10s;proxy_send_timeout 15s;ให้เวลา origin มากขึ้นในการตอบสนองภายใต้โหลด ขณะยังคงล้มเหลวเร็วบนปัญหาการเชื่อมต่อ
Server Block
หัวข้อที่มีชื่อว่า “Server Block”server { listen 80 reuseport; # Kernel distributes connections across all 4 workers server_name _;}reuseport เปิดใช้งาน SO_REUSEPORT — เคอร์เนลกระจายการเชื่อมต่อขาเข้าโดยตรงไปยัง worker processes ขจัดการแย่ชิง accept mutex
เฮดเดอร์ผู้ให้บริการ CDN
หัวข้อที่มีชื่อว่า “เฮดเดอร์ผู้ให้บริการ CDN”ตัวจำลองฉีดเฮดเดอร์จากผู้ให้บริการ CDN หลักทั้งห้ารายพร้อมกัน ซึ่งช่วยให้สามารถกำหนดค่า F5 XC ด้วย “Trusted Client IP Header” ของผู้ให้บริการรายใดก็ได้ และเห็น payload ของเฮดเดอร์ที่สมจริงโดยไม่คำนึงว่ากำลังจำลอง CDN ใดอยู่
เฮดเดอร์มาตรฐานอุตสาหกรรม (CDN ทุกราย)
หัวข้อที่มีชื่อว่า “เฮดเดอร์มาตรฐานอุตสาหกรรม (CDN ทุกราย)”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
X-Forwarded-For | ห่วงโซ่ IP ของไคลเอนต์ | IP ที่ถูกส่งต่อตามมาตรฐาน |
X-Forwarded-Proto | http หรือ https | โปรโตคอลดั้งเดิมของไคลเอนต์ |
X-Forwarded-Host | ชื่อโฮสต์ดั้งเดิม | เฮดเดอร์ Host ดั้งเดิม |
X-Forwarded-Port | พอร์ตของเซิร์ฟเวอร์ | พอร์ตดั้งเดิม |
X-Real-IP | IP ของไคลเอนต์ | IP ไคลเอนต์เดี่ยว (ตามแบบแผน nginx) |
Via | 1.1 cdn-simulator | การระบุตัวตน proxy |
Forwarded | รูปแบบ RFC 7239 | เฮดเดอร์การส่งต่อที่ได้มาตรฐาน |
CDN-Loop | cdn-simulator | การตรวจจับ loop |
เฮดเดอร์ Akamai
หัวข้อที่มีชื่อว่า “เฮดเดอร์ Akamai”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
True-Client-IP | IP ของไคลเอนต์ | ที่อยู่ IP ของผู้ใช้ปลายทางดั้งเดิม |
X-Akamai-Edgescape | สตริง geo แบบผสม | georegion, country_code, region_code, city, dma, pmsa, msa, areacode, county, fips, lat, long, timezone, zip, continent, throughput, bw, network, asnum, network_type |
X-Akamai-Device-Characteristics | คุณสมบัติอุปกรณ์ | brand_name, model_name, is_mobile, is_tablet, is_wireless_device, device_os, device_os_version, resolution_width, resolution_height |
X-Akamai-Request-ID | Request UUID | ตัวระบุคำขอที่ไม่ซ้ำกัน |
เฮดเดอร์ Cloudflare
หัวข้อที่มีชื่อว่า “เฮดเดอร์ Cloudflare”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
CF-Connecting-IP | IP ของไคลเอนต์ | IP ไคลเอนต์ที่แท้จริง (มีเสมอ) |
CF-IPCountry | US | รหัสประเทศสองตัวอักษร |
cf-ipcity | San Jose | เมืองของไคลเอนต์ |
cf-ipcontinent | NA | รหัสทวีป |
cf-iplatitude / cf-iplongitude | พิกัด | ข้อมูลตำแหน่งทางภูมิศาสตร์ |
cf-region / cf-region-code | California / CA | ข้อมูลภูมิภาค |
cf-metro-code | 807 | รหัส metro ของสหรัฐอเมริกา |
cf-postal-code | 95113 | รหัสไปรษณีย์ |
cf-timezone | America/Los_Angeles | timezone IANA |
Cf-Ray | {request_id}-SJC | Ray ID ที่ไม่ซ้ำกันพร้อมรหัส IATA ของ POP |
CF-Visitor | {"scheme":"https"} | ข้อมูลโปรโตคอลของผู้เยี่ยมชม |
cf-bot-score | 85 | คะแนน bot (1=bot, 99=human) |
cf-verified-bot | false | แฟล็ก bot ที่รู้จักและดี |
cf-ja3-hash | e7d705a3286e19ea42f587b344ee6865 | fingerprint TLS แบบ JA3 |
cf-ja4 | t13d1516h2_8daaf6152771_b0da82dd1658 | fingerprint TLS แบบ JA4 |
เฮดเดอร์ Amazon CloudFront
หัวข้อที่มีชื่อว่า “เฮดเดอร์ Amazon CloudFront”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
CloudFront-Viewer-Address | IP:port | IP ไคลเอนต์และพอร์ตต้นทาง |
CloudFront-Viewer-Country | US | รหัสประเทศ |
CloudFront-Viewer-Country-Name | United States | ชื่อประเทศเต็ม |
CloudFront-Viewer-Country-Region | CA | รหัสภูมิภาค |
CloudFront-Viewer-Country-Region-Name | California | ชื่อภูมิภาคเต็ม |
CloudFront-Viewer-City | San Jose | เมืองของไคลเอนต์ |
CloudFront-Viewer-Postal-Code | 95113 | รหัสไปรษณีย์ |
CloudFront-Viewer-Latitude / Longitude | 37.33530 / -121.89300 | ข้อมูลตำแหน่งทางภูมิศาสตร์ |
CloudFront-Viewer-Time-Zone | America/Los_Angeles | timezone IANA |
CloudFront-Viewer-Metro-Code | 807 | รหัส metro ของสหรัฐอเมริกา |
CloudFront-Viewer-ASN | 7018 | หมายเลข Autonomous System |
CloudFront-Viewer-Http-Version | 2.0 | เวอร์ชัน HTTP ของไคลเอนต์ |
CloudFront-Forwarded-Proto | https | โปรโตคอลดั้งเดิม |
CloudFront-Viewer-TLS | TLSv1.3:TLS_AES_128_GCM_SHA256:sessionResumed | รายละเอียด TLS |
CloudFront-Viewer-JA3-Fingerprint | e7d705a3286e19ea42f587b344ee6865 | fingerprint TLS แบบ JA3 |
CloudFront-Is-Desktop-Viewer | true/false | การตรวจจับอุปกรณ์ |
CloudFront-Is-Mobile-Viewer | true/false | การตรวจจับอุปกรณ์ |
CloudFront-Is-Tablet-Viewer | true/false | การตรวจจับอุปกรณ์ |
CloudFront-Is-SmartTV-Viewer | false | การตรวจจับอุปกรณ์ |
X-Amz-Cf-Id | ID ที่เข้ารหัส | ตัวระบุคำขอ CloudFront |
เฮดเดอร์ Fastly
หัวข้อที่มีชื่อว่า “เฮดเดอร์ Fastly”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
Fastly-Client-IP | IP ของไคลเอนต์ | IP ไคลเอนต์ที่แท้จริง |
Fastly-SSL | 1 | การเชื่อมต่อผ่าน TLS |
Fastly-Client | 1 | คำขอฝั่งไคลเอนต์ (ไม่ใช่ shield) |
Fastly-FF | cache-sjc3120-SJC | การระบุตัวตน cache node |
X-Geo-Country-Code | US | ประเทศ (ตามแบบแผนตัวแปร VCL) |
X-Geo-Country-Code3 | USA | รหัสประเทศสามตัวอักษร |
X-Geo-Country-Name | United States | ชื่อประเทศเต็ม |
X-Geo-City | San Jose | เมืองของไคลเอนต์ |
X-Geo-Region | CA | รหัสภูมิภาค |
X-Geo-Continent-Code | NA | ทวีป |
X-Geo-Latitude / X-Geo-Longitude | 37.3353 / -121.8938 | ข้อมูลตำแหน่งทางภูมิศาสตร์ |
X-Geo-Postal-Code | 95113 | รหัสไปรษณีย์ |
X-Geo-Metro-Code | 807 | รหัส metro ของสหรัฐอเมริกา |
X-Geo-ASN | 7018 | หมายเลข Autonomous System |
X-Geo-Conn-Speed | broadband | ประเภทความเร็วการเชื่อมต่อ |
X-Geo-Conn-Type | wired | ประเภทการเชื่อมต่อ |
เฮดเดอร์ Azure Front Door
หัวข้อที่มีชื่อว่า “เฮดเดอร์ Azure Front Door”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
X-Azure-ClientIP | IP ของไคลเอนต์ | ที่อยู่ IP ของไคลเอนต์ |
X-Azure-SocketIP | IP ของไคลเอนต์ | IP ต้นทาง TCP socket |
X-Azure-Ref | สตริง ref ที่เข้ารหัส | การอ้างอิงคำขอที่ไม่ซ้ำกันสำหรับการแก้ไขปัญหา |
X-Azure-FDID | a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 | ตัวระบุทรัพยากร Front Door |
X-Azure-RequestChain | hops=1 | จำนวน hop สำหรับการตรวจจับ loop |
เฮดเดอร์การตอบสนอง (เพิ่มในการตอบสนองของไคลเอนต์)
หัวข้อที่มีชื่อว่า “เฮดเดอร์การตอบสนอง (เพิ่มในการตอบสนองของไคลเอนต์)”| เฮดเดอร์ | ค่า | วัตถุประสงค์ |
|---|---|---|
X-Cache-Status | HIT, MISS, EXPIRED, STALE, UPDATING | พฤติกรรมแคชสำหรับคำขอนี้ |
X-CDN-Edge | cdn-simulator | ระบุตัวตน edge node นี้ |
X-CDN-POP | SJC | รหัส IATA ของ Point of Presence ที่จำลอง |
X-Served-By | cache-sjc3120-SJC | cache node ที่จำลองในรูปแบบ Fastly |
X-Request-ID | UUID (ต่อคำขอ) | ตัวระบุคำขอที่ไม่ซ้ำกัน |
การตรวจจับอุปกรณ์
หัวข้อที่มีชื่อว่า “การตรวจจับอุปกรณ์”ตัวจำลองตรวจจับประเภทอุปกรณ์จากเฮดเดอร์ User-Agent โดยใช้คำสั่ง NGINX map:
- มือถือ: ตรงกับ iPhone, Android (ที่ไม่ใช่แท็บเล็ต), iPod, BlackBerry, Opera Mini, IEMobile
- แท็บเล็ต: ตรงกับ iPad, Android tablet, Kindle, PlayBook
- เดสก์ท็อป: ค่าเริ่มต้นเมื่อไม่ตรงกับมือถือหรือแท็บเล็ต
ประเภทอุปกรณ์ถูกสะท้อนใน:
CloudFront-Is-Desktop-Viewer/CloudFront-Is-Mobile-Viewer/CloudFront-Is-Tablet-ViewerX-Akamai-Device-Characteristics(ฟิลด์is_mobile,is_tablet,is_wireless_device)
การดำเนินการ
หัวข้อที่มีชื่อว่า “การดำเนินการ”การเปลี่ยนเซิร์ฟเวอร์ต้นทาง
หัวข้อที่มีชื่อว่า “การเปลี่ยนเซิร์ฟเวอร์ต้นทาง”ssh azureuser@<PUBLIC_IP>
# Update upstream serversudo sed -i 's|server .*;|server NEW_HOST:80;|' /etc/nginx/conf.d/cdn-edge.conf
# Clear cache and reloadsudo rm -rf /var/cache/nginx/cdn/*sudo nginx -t && sudo systemctl reload nginxหรืออัปเดต origin_host ใน terraform.tfvars และรัน terraform apply เพื่อจัดเตรียมใหม่
การล้างแคช
หัวข้อที่มีชื่อว่า “การล้างแคช”ssh azureuser@<PUBLIC_IP>sudo rm -rf /var/cache/nginx/cdn/*sudo systemctl reload nginxการตรวจสอบสถิติแคช
หัวข้อที่มีชื่อว่า “การตรวจสอบสถิติแคช”# Object count and disk usagesudo find /var/cache/nginx/cdn -type f | wc -lsudo du -sh /var/cache/nginx/cdn
# Recent access log with cache statustail -20 /var/log/nginx/access.logการตรวจสอบภายใต้โหลด
หัวข้อที่มีชื่อว่า “การตรวจสอบภายใต้โหลด”# Real-time connections and socket statesss -s
# NGINX worker CPU usagetop -bn1 | grep nginx
# Upstream keepalive connectionsss -tn state established dst <ORIGIN_IP> | wc -l
# TIME_WAIT socket countss -tn state time-wait | wc -lผลการทดสอบประสิทธิภาพ
หัวข้อที่มีชื่อว่า “ผลการทดสอบประสิทธิภาพ”ผ่านการยืนยันภายใต้การทดสอบโหลดต่อเนื่อง 48 ชั่วโมง:
| ตัวชี้วัด | ค่า |
|---|---|
| throughput สูงสุด (แคช) | 172,540 req/s |
| throughput ที่ยั่งยืน (แคช) | 85,000-103,000 req/s |
| การเชื่อมต่อสูงสุด | 15,000 concurrent |
| อัตราการ hit แคช | 100% (เมื่อ warm แล้ว) |
| หน่วยความจำภายใต้โหลด | 1.2 GB เสถียร (8% ของ 16 GB) |
| CPU ที่ยอดสูงสุด | 100% (4 cores - CPU คือเพดาน) |
| ข้อผิดพลาดระหว่างการทดสอบ 48h | 0 |
| การรั่วไหลของหน่วยความจำ | ไม่พบ |
| การรั่วไหลของการเชื่อมต่อ | ไม่พบ |