Sorun açıklaması
Yüksek CPU kullanımı veya sistem yükü aşağıdaki belirtilere neden olabilir:
-
Uygulama hizmeti sorunları
SSH uzaktan bağlantıları yavaş olur veya yanıt vermez; ciddi durumlarda bağlantı başarısız olabilir.
Web sitenizin veya uygulamanızın yanıt süresi önemli ölçüde artar ve sayfalar yavaş yüklenir.
İstekler sık sık zaman aşımına uğrar, API çağrıları başarısız olur ve hizmetlerinizin genel işleme kapasitesi belirgin şekilde düşer.
-
Sistem kaynağı anormallikleri
Örnek CPU kullanımı tutarlı olarak %80'in üzerinde seyreder, hatta %100'e yaklaşır.
Sistem yükü (load average) tutarlı olarak mantıksal CPU çekirdek sayısından yüksek olur. Örneğin, 4 çekirdekli bir örnekte yük ortalaması 4'ten büyükse bu durum anormaldir.
CloudMonitor, yüksek sistem yükü için SMS veya e-posta yoluyla uyarılar tetiklemiştir.
Nedenler
CPU yoğun işlemler: Bu sorun genellikle sonsuz döngüler, karmaşık hesaplama görevleri veya yüksek eşzamanlı istekler gibi hatalı uygulama mantığından kaynaklanır. Meşru trafik yanı sıra kötü niyetli saldırılar da bu duruma yol açabilir.
G/Ç performans darboğazı: Sık disk okuma/yazma işlemleri veya yetersiz depolama performansı, işlemlerin G/Ç bekleme durumunda uzun süre kalmasına neden olarak sistem yük ortalamasını artırır.
Çekirdek veya sistem çağrıları: Sık bağlam değiştirme, çekirdek görevleri veya sürücü sorunları, çekirdek modunda yüksek CPU kullanımına yol açar.
Anormal veya kötü niyetli programlar: Örnek, kripto madenciliği yazılımı, Truva atı veya gizli işlemlerle çok sayıda işlem kaynağı tüketen rootkit bulaşması yaşamış olabilir.
Çözüm
Yüksek CPU kullanımının veya sistem yükünün temel nedenini (kullanıcı alanı, çekirdek alanı veya G/Ç bekleme gibi) belirlemek için top aracını kullanın. Ardından sorunu daha derinlemesine analiz etmek ve çözmek için perf, iotop veya vmstat gibi araçlardan yararlanın.
Adım 1: CPU darboğazını belirleme
-
Bir ECS örneğine VNC bağlantısı kullanarak oturum açın.
ECS konsolu - Örnekler sayfasına gidin. Sol üst köşeden hedef örnek için bölgeyi ve kaynak grubunu seçin.
Hedef örneğin ayrıntılar sayfasına şuraya gidin. Connect düğmesine tıklayın ve VNC seçeneğini belirleyin. ECS örneğinde oturum açmak için kimlik bilgilerinizi girin.
-
Sistem yükünü ve işlem etkinliğini kontrol edin.
sudo top -
Sorunun nedenini belirleyin.
topetkileşimli arayüzünde, işlemleri CPU kullanımına göre azalan sırada sıralamak içinPtuşuna basın. En çok CPU tüketen işlemin işlem kimliğini (PID) ve komut adını (COMMAND) belirleyin.java,pythonveyaphp-fpmgibi bir uygulama işlemi tutarlı olarak CPU'nun %80'inden fazlasını kullanıyorsa Yoğun uygulama işlemlerini yönetme bölümüne bakın.-
%Cpu(s)satırındaki G/Ç bekleme (wa) değeri tutarlı olarak %20'nin üzerindeyse, kullanıcı alanı (us) ve çekirdek alanı (sy) değerleri düşükse ve yük ortalaması CPU çekirdek sayısından çok daha yüksekse, CPU disk G/Ç'sini beklerken boşta fazla zaman harcıyordur. Bu durumda Disk G/Ç darboğazlarını yönetme bölümüne bakın.Bir işlem disk G/Ç işleminin tamamlanmasını beklerken kesilemeyen uyku durumuna (D durumu) girer ve sonlandırılamaz. D durumundaki çok sayıda işlem, diskin yavaş yanıt verdiğini gösterir; bu durum CPU'nun beklemesine zorlar ve sistem yükünü artırır.
%Cpu(s)satırındaki sistem (sy) değeri tutarlı olarak %30'un üzerindeyse, bu genellikle çekirdeğin sık sık sistem çağrıları yürüttüğünü veya kesmeleri işlediğini gösterir. Bu durumda Yoğun çekirdek veya sistem çağrılarını yönetme bölümüne bakın.%Cpu(s)satırındaki softirq (si) değeri tutarlı olarak %15'in üzerindeyse, bu yüksek ağ trafiğini gösterir. Bu durumda Yoğun ağ kesmelerini yönetme bölümüne bakın.
Adım 2: Sorunu analiz etme ve çözme
Yoğun uygulama işlemleri
-
Kodunuzu analiz edin ve optimize edin:
Kodunuzdaki kritik noktaları bulmak için performans profil oluşturma araçlarını kullanın.
Java uygulamaları: İş parçacığı yığınlarını dışa aktarmak için
jstack <PID>komutunu kullanın.RUNNABLEdurumundaki iş parçacıklarını arayın ve çağrı yığınının belirli bir yöntemde uzun süre takılıp takılmadığını kontrol edin.C/C++ uygulamaları: En çok CPU tüketen belirli işlev sembollerini görüntülemek için
perf top -p <PID>komutunu kullanın.
Analize dayanarak algoritmaları optimize edin, sonsuz döngüleri düzeltin veya gereksiz hesaplamaları azaltın.
Uygulama katmanı saldırılarını hafifletin: Çok sayıda olağan dışı HTTP isteği ile karakterize edilen kötü niyetli bir uygulama katmanı CC saldırısı yaşıyorsanız, korunma amacıyla bir web application firewall (WAF) dağıtın. Daha fazla bilgi için WAF kullanarak bir ECS örneğini CC saldırılarına karşı koruma konusuna bakın.
Kaynakları yükseltin: Darboğaz normal iş büyümesinden kaynaklanıyorsa örnek türünü yükseltin.
Disk G/Ç darboğazları
Yüksek G/Ç'ye neden olan işlemi belirleyin: Linux sisteminde yüksek disk G/Ç yükünü giderme.
-
D durumunda biriken işlemleri kontrol edin:
sudo ps -axjf | grep " D"Uygulama optimizasyonu: Disk okuma/yazma işlemlerini azaltmak için günlük seviyelerini düşürün ve veritabanı sorgularına dizin ekleyin.
Depolamayı yükseltin: IOPS ve aktarım hızını artırmak için cloud disk kategorisini yükseltebilirsiniz (örneğin, ESSD PL1'den ESSD PL2/PL3'e). Cloud disk'in maksimum IOPS değeri ayrıca bağlı örnek türü tarafından kısıtlanır. Örnek türünün IOPS sınırı cloud disk'in yeteneğinden düşükse örnek türünü yükseltmeniz gerekir.
Sistemi yeniden başlatın: Sistemi yeniden başlatmak, D durumunda biriken işlemleri temizleyebilir.
Yoğun çekirdek veya sistem çağrıları
Bağlam değiştirmelerini kontrol edin:
vmstat 1komutunu çalıştırın vecs(context switch) sütunundaki değeri gözlemleyin. Bu değer tutarlı olarak 100.000'i aşarsa, bağlam değiştirme oranı aşırı derecede yüksektir. Uygulamanızın çok fazla iş parçacığı oluşturup yok edip etmediğini kontrol edin.-
Çekirdek görevlerini kontrol edin: kswapd0 işlemi yüksek CPU kullanımı gösteriyorsa, fiziksel bellek yetersizdir ve çekirdek sık sık belleği geri kazanıyordur. Bunu çözmek için örnek türünü yükseltin.
Fiziksel bellek düşük olduğunda, kswapd0 sık sık bellek sayfalarını tarar, geri kazanır ve takas eder. Bu hesaplama yoğun görevler önemli CPU kaynakları tüketir ve yüksek CPU kullanımına neden olur.
Yoğun ağ kesmeleri
Trafiği analiz edin: Ağ trafiğinin kaynağını ve türünü analiz etmek için
iftopveyaiptraf-nggibi araçları kullanın.Yapılandırmayı kontrol edin: Yüksek ağ iş yükleri için, kesmeleri birden fazla CPU çekirdeğine dağıtmak üzere ağ arabirim kartı (NIC) için çoklu kuyruğu etkinleştirebilirsiniz.
-
Ağ saldırılarına yanıt verin:
Saldırgan IP adreslerini belirleyin: Bilinen kötü niyetli IP adreslerini engellemek için güvenlik grubu kurallarını yönetebilirsiniz.
Büyük ölçekli DDoS saldırılarını yönetin: Yüksek hacimli bir DDoS saldırısı sırasında, peak trafik Anti-DDoS Origin blackhole eşiğini aşabilir; bu durum blackhole filtrelemeyi tetikler ve hizmetlerinize erişilemez hale gelmesine neden olur. Hizmet kullanılabilirliğini sürdürmek için Anti-DDoS Pro özelliğini etkinleştirin.
Sonraki adımlar
İzleme ve uyarı yapılandırma: CPU kullanımı, sistem yükü ve G/Ç bekleme gibi ölçümler için makul uyarı eşikleri ayarlayarak erken uyarılar alın. Linux sistem ölçümlerinin geçmiş analizini gerçekleştirmek için atop aracını kullanarak Linux sistem ölçümlerini izleyebilirsiniz.
Düzenli güvenlik denetimleri gerçekleştirin: Hostlarınızda potansiyel güvenlik risklerini gidermek amacıyla Security Center'ı kullanarak periyodik olarak açıklık taramaları, virüs taramaları ve temel çizgi denetimleri gerçekleştirin.
Düzenli incelemeler ve optimizasyonlar gerçekleştirin: Sistemlerinizin ve uygulamalarınızın performansını ve kodunu periyodik olarak gözden geçirerek potansiyel performans darboğazlarını belirleyin ve çözün.
Kapasite planlaması: Sisteminizin gelecekteki yükü karşılayabilmesini sağlamak için iş büyüme trendlerine dayalı olarak kaynak kapasitesini planlayın.