Senario
Sebuah penggunaan mikrosentuh biasa menggunakan Nginx sebagai proksi terbalik dan penamat TLS, di hadapan middleware gerbang API bersepadu (contohnya, Kong, berdasarkan OpenResty/Nginx) yang mengendalikan pengesahan, had kadar, dan penghalaan permintaan. Dalam masa sebulan selepas lonjakan trafik, pasukan operasi melihat masa tindak balas purata meningkat daripada 120 ms kepada 800 ms, dan latensi p99 melebihi 2 saat. Sebilangan pengguna mula menerima ralat 504 Gateway Timeout. Penggunaan CPU gerbang mencapai 95% secara berkala, dan log aplikasi upstream menunjukkan peningkatan reset sambungan. Sistem tidak turun sepenuhnya, tetapi pengalaman pengguna merosot dengan pantas.
Gejala
- Latensi tinggi (p99 > 2s) dan tamat masa yang kerap
- Kehabisan CPU pada nod Nginx/gerbang
- Peningkatan ralat 5xx, terutamanya 502/504
- Sambungan upstream terputus
- Log ralat dipenuhi dengan "worker_connections are not enough" dan "upstream timed out"
Diagnosis
Mulakan dengan urutan semula jadi: semak metrik sistem, status Nginx, log, kemudian mendalami dengan ujian beban.
- Sahkan sumber sistem: Gunakan
top,vmstat, danmpstatuntuk melihat CPU, memori, dan I/O. Masasyyang tinggi menunjukkan panggilan kernel/sistem, sering disebabkan oleh pertukaran konteks yang berlebihan. - Periksa sambungan pekerja Nginx:
ngx_http_stub_status_modulemendedahkan pembilang asas. Aktifkan dalam blok lokasi dan curl:location /nginx_status { stub_status; allow 127.0.0.1; deny all; }Kemudiancurl http://127.0.0.1/nginx_status. Lihat "Active connections" dan "Waiting" vs "Writing". - Periksa log ralat Nginx:
tail -n 100 /var/log/nginx/error.log. Mesej biasa: - "upstream timed out (110: Connection timed out)" — semak proxy_read_timeout. - "no live upstreams" — semak pemeriksaan kesihatan pelayan upstream. - "worker_connections are not enough" — tingkatkan worker_connections atau kurangkan sambungan keepalive. - Periksa log middleware gerbang API (contohnya, error.log Kong). Untuk Kong, anda juga boleh menanyakan titik akhir
/statusuntuk status kluster. - Analisis format log akses Nginx dengan masa tindak balas. Jika anda menggunakan pembolehubah
$request_time, anda boleh melihat permintaan perlahan secara langsung. Contoh:tail -f /var/log/nginx/access.log | awk '{print $NF}'jika masa adalah medan terakhir. - Lakukan ujian beban terkawal menggunakan
wrkatauabpada titik akhir ujian untuk mengasingkan sama ada kesesakan berlaku di Nginx atau middleware gerbang:wrk -t4 -c100 -d30s http://your-gateway/healthBandingkan dengan akses langsung ke aplikasi upstream untuk melihat perbezaannya.
Arahan dan Tindakan Segera
Berikut adalah arahan praktikal untuk mengumpul data tambahan dan memulakan pembaikan, dengan nota keselamatan.
- Sahkan konfigurasi sebelum memuat semula:
nginx -t -c /etc/nginx/nginx.conf(mesti dijalankan sebagai root atau dengan kebenaran yang sesuai). - Muat semula Nginx secara berhemah untuk menggunakan perubahan:
nginx -s reload(berfungsi jika anda mempunyai kebenaran; dalam systemd,systemctl reload nginx). - Naikkan worker_connections buat sementara dalam blok
eventsjika anda melihat "worker_connections are not enough". Ini memerlukan muat semula, dan ia selamat selagi deskriptor fail mencukupi (ulimit -n). - Optimal keepalive ke upstream: Dalam blok
upstreamNginx, pastikankeepalive 32;dan dalam bloklocation, tetapkanproxy_http_version 1.1;danproxy_set_header Connection "";untuk menggunakan semula sambungan upstream. Ini dapat mengurangkan memori dan CPU dengan ketara. - Untuk tamat masa upstream, laraskan
proxy_connect_timeout,proxy_send_timeout,proxy_read_timeoutkepada nilai munasabah (contohnya, 5s, 10s, 60s). Jangan tetapkan terlalu tinggi kerana ia akan mengikat sambungan pekerja. - Untuk middleware gerbang API (andaikan Kong), gunakan admin API untuk memeriksa plugin prestasi. Jika had kadar diaktifkan, semak pembilang untuk memastikan had tidak menyebabkan pendikit.
- Gunakan
strace -p <nginx_pid> -f -e trace=networkselama beberapa saat untuk melihat sama ada panggilan sistem menyekat (hanya jika anda selesa; ia boleh menyebabkan overhead). - Periksa deskriptor fail terbuka:
lsof -p $(pidof nginx) | wc -luntuk melihat sama ada proses pekerja mencapai had.
Kawalan risiko: Sebarang perubahan hendaklah digunakan pada satu nod terlebih dahulu (jika terdapat pengimbang beban di hadapan). Simpan sandaran konfigurasi semasa: cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak. Gunakan canary dengan mengalihkan trafik secara perlahan menggunakan berat dalam blok upstream. Jika anda mengubah suai plugin dalam gerbang API, lakukan melalui admin API dan uji dalam persekitaran pementasan.
Rollback
Jika pelarasan membawa kepada tingkah laku atau ralat yang lebih buruk, kembalikan serta-merta.
- Untuk perubahan konfigurasi Nginx, gantikan konfigurasi dengan fail .bak dan jalankan
nginx -tkemudiannginx -s reload. Ini adalah rollback yang berhemah yang tidak menggugurkan sambungan aktif. - Untuk perubahan plugin gerbang API, anda boleh melumpuhkan plugin melalui admin API atau kembali ke konfigurasi deklaratif sebelumnya (jika menggunakan mod deklaratif).
- Sentiasa ada pelan rollback untuk perubahan sijil (contohnya, sesi TLS). Muat semula dengan konfigurasi buruk akan ditangkap oleh
nginx -t.
Pengesahan
Selepas menggunakan perubahan, sahkan bahawa masalah diselesaikan.
- Pantau metrik utama: nilai
nginx_status(Sambungan Aktif harus stabil), masa tindak balas dalam log akses ($request_time), dan kadar ralat. - Jalankan ujian beban sekali lagi dengan parameter yang sama seperti sebelumnya. Bandingkan p99 dan kadar ralat.
- Gunakan alat papan pemuka seperti Grafana dan Prometheus jika ada untuk menggambarkan perubahan.
- Semak
curl -v https://your-api/endpointuntuk memastikan jabat tangan TLS lancar dan tiada latensi tambahan.
Bila Menghantar Tiket OpsGlobal
Jika anda masih melihat penggunaan CPU tinggi selepas melaraskan worker_connections, keepalive, dan tamat masa, atau jika middleware gerbang itu sendiri menjadi kesesakan (contohnya, kolam sambungan pangkalan data Kong, Lua JIT, atau plugin tersuai), sudah tiba masanya untuk membawa pakar. OpsGlobal boleh melakukan penyiasatan mendalam dengan alat penjejakan seperti eBPF/perf, menganalisis dalaman Nginx dan gerbang, dan melaksanakan strategi prestasi lanjutan seperti pengurusan upstream dinamik, pengoptimuman konfigurasi, dan penalaan kernel. Jika isu itu menjejaskan ketersediaan pengeluaran, hantar tiket segera untuk meminimumkan masa henti.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Ketahui cara mendiagnosis dan menyelesaikan masalah prestasi dalam persediaan Nginx dan middleware gerbang API. Panduan ini merangkumi penyelesaian masalah berdasarkan senario, diagnosis baris arahan, kawalan risiko, strategi rollback, dan teknik pengesahan—serta bila untuk menghubungi OpsGlobal untuk sokongan SRE pakar.
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.