Tiba-tiba tidak dapat diakses? Tutorial penyelesaian dan pengoptimuman CPU ECS Alibaba Cloud penuh (100%)

awan 2026-05-28 阅读 10
cloud

Laman web baik pada waktu siang, tetapi tiba-tiba tersekat pada waktu petang, penyemak imbas terus berpusing, dan akhirnya melaporkan "504 Gateway Timeout" atau "Tidak dapat menyambung".

Terkejut, saya dengan cepat menyambung ke konsol Alibaba Cloud dan melihat pemantauan contoh ECS:

CPU dimuat sepenuhnya, menarik garis merah 100%.

Adegan seperti ini telah dihadapi oleh kebanyakan webmaster peribadi dan pengembangan operasi dan penyelenggaraan. Dalam kes ini, jangan panik, dan jangan tergesa-gesa untuk memulakan semula pelayan (memulakan semula hanya dapat mengatasi gejala, dan CPU masih akan meletup dalam beberapa minit). Hari ini, jangan bincangkan teori maya, berikan satu set secara langsung

Peraturan ketenteraan untuk penyiasatan dan pengoptimuman persekitaran pengeluaran dalam talian

, Ikuti langkah-langkahnya, dan terbongkar di belakang tabir dalam 5 minit.

Idea penyiasatan teras: kaedah penentuan kedudukan tiga langkah

Apabila CPU berjalan penuh, logik penyiasatan kami adalah:

Lihat keseluruhannya: Proses mana (Nginx, PHP, Java atau Trojan) yang menelan sumber?

Lihat bahagiannya: Kod mana, utas mana (Thread) atau SQL mana dalam proses ini tidak berfungsi?

Lakukan berat: Setelah mencari, haruskah saya mengoptimumkan kod, menambahkan cache, atau membunuh prosesnya secara langsung?

Langkah 1: Log masuk ke pelayan dan cari proses yang bermasalah (1 minit)

Tidak kira bagaimana laman web tersekat, selagi SSH masih boleh disambungkan, sambungkan dengan segera. Sekiranya SSH tempatan tersekat dan tidak dapat disambungkan, terus melalui konsol Alibaba Cloud

$ \ Rightharrow $

Contoh ECS

$ \ Rightharrow $

Sambungan jauh (Workbench) log masuk secara paksa.

Masukkan arahan berikut, ini adalah senjata utama untuk Linux untuk memeriksa prestasi:

Bash

Bahagian atas

Masukkan

Bahagian atas

Selepas antara muka, tekan huruf besar

P

(Disusun mengikut penggunaan CPU). Anda akan melihat senarai dinamik seperti di bawah:

Teks biasa

PID USER PR NI VIRT RES SHR S % CPU % MEM TIME COMMAND

12345 nginx 20 0 354m 45m 12m R 98.5 2.3 12:34.56 php-fpm

6789 mysql 20 0 2.5g 1.2g 24m S 1.5 60.2 45:12.89 mysqld

Analisis keputusan:

Lihat baris pertama

COMMAND

Apa itu:

Sekiranya ia adalah php-fpm atau node atau java: Ini bermaksud bahawa kod perniagaan laman web anda telah menghadapi gelung yang tidak berkesudahan, atau lalu lintas yang tiba-tiba menyebabkan prestasi tidak dapat ditahan.

Sekiranya mysqld: Ini bermaksud bahawa pangkalan data telah mengalami pertanyaan lambat, indeks yang hilang, atau penguncian serentak tinggi.

Jika ia adalah nginx atau httpd: besar

Kebarangkalian adalah bahawa ia telah mengalami penyikat jahat, serangan CC atau perayap gila.

Sekiranya ia adalah huruf dan nombor yang rosak (seperti kdevtmpfsi, miner): Jangan memikirkannya, pelayan telah diretas dan ditangkap sebagai pelombong.

Langkah 2: Membahagi pemandangan secara mendalam dan membongkar bom dengan tepat (3 minit)

Menurut anda

Bahagian atas

Untuk hasil yang dilihat di sini, pilih jalan penyelesaian berikut.

Adegan A:Command adalah

Mysqld

(Pangkalan data tersekat)

Ini adalah senario di mana frekuensi tinggi berlaku. Biasanya kerana kod perniagaan tertentu ditulis terlalu sampah, dan beratus-ratus ribu baris data diperiksa tanpa indeks.

1. Log masuk ke pangkalan data untuk melihat SQL yang sedang dijalankan

Log masuk ke MySQL anda di terminal:

SQL

Mysql-u root -p

-Jalankan selepas log masuk

SHOW PROCESSLIST;

Sekiranya senarai prompt terlalu panjang dan tidak lengkap, anda boleh menggunakan:

SQL

SHOW FULL PROCESSLIST;

2. Tangkap hantu

Dalam senarai output, perhatikan

Masa

(Masa pelaksanaan) sangat lama, dan

Negeri

Secara eksplisit

Sending data

,

Sorting untuk kumpulan

Atau

Buat jadual tmp

Baris itu. Tengoklah

Info

Pernyataan SQL apa yang ditulis di lajur.

Penghindaran kecemasan: Apabila anda melihat SQL lambat yang membuat orang muntah darah, ingat It, jalankan KILL It secara langsung; (contohnya, KILL 142;), lepaskan pangkalan data terlebih dahulu, dan laman web dapat segera menyambung semula akses.

Penyelesaian radikal: Ambil SQL ini untuk mencari alasan dalam kod, dan cepat-cepat tambahkan indeks ke bidang di belakang WHERE atau JOIN; jika itu adalah korelasi jadual besar, pertimbangkan untuk menambahkan cache Redis.

Adegan B:Command adalah

Java

(Gelung tanpa henti di dalam program/OOM)

CPU aplikasi Java melambung tinggi, biasanya utas tertentu terperangkap

While (true)

Kitaran tanpa henti, atau pengumpulan sampah yang kerap (Full GC).

1. Cari utas yang menggunakan CPU paling banyak

Katakan proses PID Java adalah

12345

。 Masukkan arahan untuk melihat utas mana yang paling banyak menggunakan sumber dalam proses ini:

Bash

Top-Hp 12345

Tekan

P

Susun, jika anda menangkap benang yang paling banyak menggunakan CPU, PID adalah

12366

2. Penukaran asas

PID benang

12366

Ditukar kepada heksadesimal:

Bash

Printf "% x \ n" 12366

# Hasil output adalah: 304e

3. Cetak maklumat timbunan

Gunakan JDK sendiri

Jstack

Alat, secara langsung mencari baris kod yang salah:

Bash

Jstack 12345 | grep "304e" -A 20

Terminal akan secara langsung mencetak nama kelas kod Java dan nombor baris yang dijalankan oleh utas ini. Pada masa lalu, ia pasti merupakan gelung tanpa henti atau rekursi tanpa sempadan. Tukar kod dan gunakan semula.

Adegan C:Command adalah

Nginx

/

Php-fpm

(Menghadapi serangan berus/CC yang berniat jahat)

Sekiranya lalu lintas biasanya kecil dan CPU tiba-tiba meletup, lihatlah log akses Nginx.

1. Statistik IP yang paling banyak dikunjungi baru-baru ini

Bash

# Katakan log Nginx anda berada di/var/log/nginx/access.log

Awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 20

Sekiranya anda mendapati bahawa IP yang tidak dikenali telah disikat puluhan ribu kali dalam beberapa minit, tidak ada keraguan bahawa anda akan menjadi sasaran.

2. IP disekat segera

Gunakan terus firewall Linux atau Alibaba Cloud Security Group untuk memasukkan IP ini ke dalam senarai hitam:

Bash

# Gunakan iptables untuk menyekat

Iptables-I INPUT -s alamat IP yang berniat jahat-j DROP

Sekiranya anda menggunakan Alibaba Cloud, pergi terus ke "Peraturan Kumpulan Keselamatan" ECS dan tambahkan peraturan penolakan (Drop).

Adegan D: Proses yang tidak dikenali secara tidak sengaja (pelayan dikurangkan menjadi ayam pedaging/perlombongan)

Sekiranya anda melihat beberapa proses pelik, ia memerlukan 99% CPU, dan anda tidak dapat mencari perisian biasa di sepanjang jalan.

Ikuti pokok anggur: Gunakan ls -l /proc/proses PID/exe untuk melihat tempat persembunyian program jahat ini.

Memotong rumput dan akar: Proses Bashkill -9 PID # Memaksa proses membunuh jalur program jahat rm -rf # Padam fail virus

Periksa pintu belakang: Hacker biasanya menulis tugas masa. Masukkan crontab -l untuk melihat apakah ada skrip masa untuk memuat turun virus secara automatik, dan hapus semua dengan crontab -e.

Pencegahan utama: Bagaimana untuk mengelakkan garis merah panjang lain kali?

Setelah berpeluh sejuk, kita perlu melakukan beberapa pertahanan asas dan langkah-langkah pembatasan semasa. Jangan biarkan CPU berpeluang menjadi pemain skor penuh.

Gunakan "pemantauan awan" Alibaba Cloud untuk mengkonfigurasi penggera. Jangan tunggu maklum balas pengguna tidak dapat dibuka sebelum menyiasat. Dalam pemantauan awan Alibaba, tetapkan peraturan: "Apabila kadar penggunaan CPU ECS lebih besar dari 85% selama 5 minit, segera kirim pesan teks/penggera kuku." Campur tangan ketika ada tanda.

Konfigurasi proses kerja maksimum PHP-FPM / Nginx

Sekiranya pelayan adalah 2-teras 4G, hadkan max_children di php-fpm.conf hingga sekitar 30-40. Dengan cara ini, walaupun lalu lintas dimaksimumkan, hanya sebilangan pengguna yang meminta 502, dan lapisan bawah pelayan tidak akan menyebabkan SSH gagal menyambung kerana memori dan CPU benar-benar habis.

Penggunaan "pengembangan fleksibel" yang wajar Sekiranya laman web atau aplikasi anda benar-benar terlibat dalam aktiviti, atau kerana carian panas telah membawa "lalu lintas" yang sebenar, tidak ada gunanya mengoptimumkan mesin yang berdiri sendiri. Pergi ke Alibaba Cloud untuk mengaktifkan ESS dan konfigurasikan peraturan: Apabila CPU melebihi 80%, ia akan secara automatik mengklon anda dan menagih mengikut jumlahnya untuk menarik ECS kedua dan ketiga untuk berkongsi lalu lintas, yang akan dilepaskan secara automatik setelah acara berakhir. Gunakan faedah kompaun teknikal untuk melawan ketidakkekalan aliran.

1
← 返回新闻中心