Senario Pelayan web pengeluaran (RHEL 8) mengalami purata beban tinggi (contohnya, 50+ pada mesin 16 teras), menyebabkan masa tindak balas perlahan dan ralat 503 berselang. SRE yang bertugas perlu mengenal pasti proses penyebab dan memulihkan operasi normal tanpa menyebabkan gangguan.
Gejala
- Purata beban > bilangan teras CPU
- uptime menunjukkan beban melebihi ambang
- top menunjukkan proses menggunakan >90% CPU atau memori
- Pemeriksaan kesihatan aplikasi gagal secara berselang
- Sambungan baru ke pelayan tamat masa
Diagnosis
1. SSH ke pelayan (menggunakan hos bastion).
2. Jalankan uptime untuk mengesahkan beban.
3. Jalankan top -o %CPU -n 1 untuk mengenal pasti pengguna CPU teratas.
4. Gunakan ps aux --sort=-%cpu | head untuk maklumat proses terperinci.
5. Jika proses tidak dikenali, periksa dengan systemctl status <perkhidmatan> atau ls -l /proc/<PID>/exe.
6. Gunakan strace -p <PID> -c -S time 2>&1 | head -20 untuk melihat profil panggilan sistem (jika strace tersedia, tetapi elakkan jalan lama dalam pengeluaran).
7. Periksa log: journalctl -u <perkhidmatan> --since "5 min yang lalu".
8. Sahkan sama ada proses itu aplikasi sah atau berniat jahat.
Arahan
# Periksa beban
uptime
# Proses teratas
top -b -o %CPU -n 1 | head -20
# Maklumat proses terperinci
ps -p <PID> -o pid,ppid,user,%cpu,%mem,cmd,etime
# Periksa fail terbuka
lsof -p <PID>
# Jika proses tersekat, hantar SIGTERM
kill -TERM <PID>
# Jika tidak responsif, bunuh dengan SIGKILL (langkah terakhir)
kill -KILL <PID>
# Mulakan semula perkhidmatan
systemctl restart <perkhidmatan>
Kawalan Risiko
- Jangan bunuh proses tanpa mengenal pastinya terlebih dahulu.
- Gunakan SIGTERM (15) sebelum SIGKILL (9).
- Jika menggunakan strace, hadkan tempoh (contohnya, -c untuk ringkasan).
- Pastikan anda mempunyai rancangan pengembalian (contohnya, sandaran konfigurasi, artifak penggunaan).
- Elakkan menjalankan arahan yang boleh memburukkan beban (contohnya, find / tanpa sekatan).
Pengembalian
Jika proses yang dibunuh adalah kritikal:
1. Pulihkan dari sandaran: cp /backup/config /etc/service/config
2. Mulakan semula perkhidmatan: systemctl restart service
3. Sahkan dengan systemctl status service dan titik akhir kesihatan aplikasi.
Pengesahan
- Jalankan uptime semula; beban harus menurun.
- Periksa top untuk memastikan proses telah ditamatkan.
- Akses titik akhir kesihatan aplikasi (contohnya, curl http://localhost:8080/health).
- Pantau selama 5 minit: watch -n 1 'uptime; ps aux --sort=-%cpu | head -5'.
Bila Perlu Menghantar Tiket OpsGlobal - Jika punca akar tidak jelas atau isu berulang. - Jika anda mengesyaki kebocoran memori atau pepijat kernel. - Jika proses adalah sebahagian daripada sistem teragih kompleks dan memerlukan penyiasatan merentas pasukan. - Apabila anda perlu meningkatkan kepada SRE kanan atau pasukan infrastruktur.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu DevOps dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan langkah demi langkah untuk mendiagnosis dan menyelesaikan beban CPU/memori tinggi pada pelayan Linux yang disebabkan oleh proses sesat, dengan langkah keselamatan dan pengembalian.
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.