Senario
Anda bertanggungjawab untuk Nginx atau gerbang API pengeluaran (cth., Kong, NGINX Plus, atau OpenResty tersuai) dan melihat peningkatan kependaman respons API, penggunaan CPU yang tinggi, dan kadang-kadang tamat masa. Ini sering disebabkan oleh konfigurasi pekerja yang salah, caching yang hilang, atau pemprosesan middleware yang tidak efisien.
Gejala
- Purata masa respons meningkat 2x atau lebih
- Kerap 504 tamat masa dari hulu
- Ralat "upstream timed out" dalam log
- Proses pekerja Nginx hampir 100% CPU
- Pelanggan melaporkan sambungan ditetapkan semula atau muat perlahan
Diagnosis
Mula-mula, kumpul metrik asas:
# Semak sambungan aktif
$ curl http://localhost/nginx_status | grep -E 'Active|Waiting'
# Ukur masa respons hulu
$ curl -w "@curl-format.txt" -o /dev/null -s https://api.example.com/endpoint
# Analisis beban sistem
$ htop -p $(pgrep -f 'nginx: worker' | tr '\n' ',')
# Tangkapan paket
$ tcpdump -i eth0 port 80 -w capture.pcap
Periksa parameter konfigurasi utama Nginx: worker_processes, worker_connections, proxy_pass, proxy_cache, proxy_buffers. Gunakan nginx -T untuk melihat konfigurasi penuh.
Arahan
Gunakan pengoptimuman berikut dalam persekitaran pementasan terlebih dahulu.
1. Optimumkan Proses Pekerja
worker_processes auto; # Padankan bilangan teras CPU
worker_rlimit_nofile 65536; # Tingkatkan had deskriptor fail
2. Dayakan Caching Proksi
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 302 60m;
proxy_cache_use_stale error timeout updating http_500;
add_header X-Cache-Status $upstream_cache_status;
}
}
3. Laraskan Penimbal dan Tamat Masa
proxy_buffer_size 8k;
proxy_buffers 8 8k;
proxy_busy_buffers_size 16k;
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
4. Kekalkan Sambungan Hulu
upstream backend {
keepalive 32;
keepalive_requests 100;
}
server {
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://backend;
}
}
5. Dayakan Mampatan Gzip
gzip on;
gzip_types application/json text/plain text/css;
gzip_min_length 1000;
6. Penalaan Khusus Middleware (cth., Kong)
- Had kadar: gunakan strategi
redisuntuk mengelakkan pertikaian memori dikongsi - Pengesahan: prakira dan cache kunci awam JWT untuk mengurangkan panggilan hulu
- Rantai plugin: lumpuhkan plugin yang tidak perlu untuk mengelakkan overhead setiap permintaan
Kawalan Risiko
- Sandarkan konfigurasi semasa:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak - Sahkan sintaks:
nginx -t - Pelancaran beransur-ansur: muat semula pada satu nod dahulu, perhatikan 5 minit
- Tetapkan penggera pemantauan: masa respons, kadar ralat, penggunaan CPU
- Gunakan alat pengurusan konfigurasi (cth., Ansible) untuk konsistensi
Rollback
Jika masalah timbul, segera:
# Pulihkan sandaran
$ cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
# Muat semula secara lembut
$ systemctl reload nginx
# Sahkan sambungan dan log ralat
$ tail -f /var/log/nginx/error.log
Jika parameter sistem diubah (cth., sysctl), kembalikan dengan sysctl -p.
Pengesahan
Gunakan alat ini untuk pengesahan prestasi:
# Ujian beban dengan wrk
$ wrk -t12 -c400 -d30s https://api.example.com/endpoint
# Bandingkan persentil kependaman (p50, p95, p99) sebelum/selepas
# Ujian mudah dengan ab
$ ab -n 10000 -c 100 https://api.example.com/endpoint
# Semak nisbah cache hit
$ curl -I https://api.example.com/endpoint | grep X-Cache-Status
Hasil ideal: masa respons berkurang 50%+, penggunaan CPU lebih rendah, tiada tamat masa.
Bila Untuk Membuka Tiket OpsGlobal
Bawa isu kepada sokongan OpsGlobal apabila: - Prestasi tidak bertambah baik selepas penalaan di atas - Analisis rangkaian peringkat kernel atau parameter TCP mendalam diperlukan - Gerbang pihak ketiga (cth., Kong) menunjukkan ralat dalaman atau pepijat plugin - Modul Nginx tersuai (cth., lua-resty) atau pengoptimuman kompilasi diperlukan - Persekitaran melebihi kapasiti nod tunggal; nasihat seni bina pengimbangan beban diperlukan
Pasukan SRE OpsGlobal membawa pengalaman penalaan pengeluaran yang luas dan boleh membantu secara jauh dengan diagnosis dan pelaksanaan perubahan yang selamat.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Atasi kependaman dan kesesakan sumber dalam gerbang API anda dengan teknik penalaan yang terbukti. Daripada pengoptimuman pekerja Nginx kepada caching middleware, panduan ini merangkumi diagnosis, arahan, kawalan risiko, dan prosedur rollback untuk operasi pengeluaran.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.