Senario
Sebuah seni bina mikroservis menggunakan Nginx sebagai gerbang API. Pengguna melaporkan peningkatan kependaman dan ralat tamat masa (504) serta ralat hulu tidak dapat dicapai (502). Pasukan SRE memulakan siasatan.
Gejala
- Masa tindak balas purata meningkat dari 50ms ke 800ms
- Kadar ralat meningkat dari 0.1% ke 5%
- Sesetengah pelanggan mengalami tamat masa berterusan
Diagnosis
- Periksa log ralat:
tail -100 /var/log/nginx/error.logmenunjukkan banyak mesej "upstream timed out" dan "no live upstreams". - Analisis log akses:
tail -100 /var/log/nginx/access.log | awk '{print $NF}'(andaikan medan terakhir adalah masa tindak balas) mendedahkan permintaan mengambil masa lebih 10 saat. - Sumber sistem:
topmenunjukkan CPU terbiar tetapi I/O wait (wa) tinggi. Perkhidmatan hulu sebenarnya sihat dan terikat memori. - Strace:
strace -p $(pidof nginx) -e trace=network -cmenunjukkan banyak epoll_wait tamat masa dan sambungan TCP yang lambat. - Semak konfigurasi:
proxy_passmenunjuk ke nama hulu tanpa keepalive atau tamat masa yang sesuai, menyebabkan sambungan baru setiap permintaan.
Perintah & Pengoptimuman
Pemeriksaan Konfigurasi Semasa
nginx -T | grep -E 'proxy_connect_timeout|proxy_send_timeout|proxy_read_timeout|keepalive'
Jika keepalive tiada, setiap permintaan membuka sambungan baru.
Optimumkan Kolam Sambungan Hulu
Tambah dalam blok http atau location:
upstream backend {
server backend-svc:8080;
keepalive 32;
}
server {
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
}
}
Laraskan Proses Pekerja
worker_processes auto;
events {
worker_connections 2048;
multi_accept on;
}
Aktifkan Cache (untuk permintaan idempoten)
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
Kawalan Risiko
- Sandarkan konfigurasi:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak - Sahkan dengan
nginx -t - Gunakan
nginx -s reload(tiada masa henti) - Uji di persekitaran pementasan dahulu jika boleh
Pengembalian
Jika masalah timbul selepas perubahan:
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf
nginx -t && nginx -s reload
Pengesahan
- Jalankan ujian beban:
ab -n 1000 -c 100 http://api.example.com/endpoint - Pantau taburan masa tindak balas:
awk '{print $NF}' access.log | sort -n | uniq -c | sort -k1 -n - Pastikan tiada ralat 502/504
Bila Menghantar Tiket OpsGlobal
- Jika prestasi tidak bertambah baik selepas penalaan asas
- Jika disyaki masalah lebih mendalam (penalaan kernel, pemunggahan SSL, seni bina)
- Apabila pengeluaran terjejas dan anda kekurangan masa untuk siasatan menyeluruh
- Apabila perlu penanda aras prestasi profesional
Pakar SRE OpsGlobal menyediakan sokongan jauh 24/7 untuk menyelesaikan isu prestasi gerbang Nginx dengan cepat.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pos ini menerangkan senario sebenar diagnosis dan pengoptimuman prestasi gerbang API Nginx, termasuk kawalan risiko, pengembalian, dan bila perlu menghubungi sokongan OpsGlobal.
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.