İçeriğe geç

Linux'ta Yüksek CPU ve Yük: Suçluyu Nasıl Bulursunuz

Orta 15 dk Güncellendi:

Kısa cevap

Linux'ta yüksek CPU ve yük genellikle aşırı kaynak tüketen tek bir süreçten kaynaklanır; bu bir uygulama hatası, kötü yapılandırma veya dış saldırı olabilir. Süreci bulmak için `top`, `htop` ve `ps` kullanın, meşru bir hizmet olup olmadığını kontrol edin, ardından optimize edin, sınırlayın veya yeniden başlatın. Sorun tekrarlanırsa günlükleri ve yapılandırmayı analiz edin.

Sorun nasıl anlaşılır

  • Sunucu yavaş yanıt veriyor, SSH komutları gecikiyor
  • Ortalama yük sürekli CPU çekirdek sayısının üzerinde
  • Web sitesi veya uygulama yavaş çalışıyor
  • Bilgisayar fanları tam hızda çalışıyor
  • İzleme, yüksek CPU için uyarılar gönderiyor

En yaygın nedenler

Aşırı CPU tüketen süreç

Bir uygulama, veritabanı veya betik döngüye girebilir veya bir çekirdeğin %100'ünü tüketen bir hataya sahip olabilir. Bu, yüksek yükün en yaygın nedenidir.

Kötü yapılandırılmış hizmet

Nginx, MySQL, PHP-FPM veya başka bir hizmet yanlış yapılandırılmış olabilir, bu da çok fazla çalışan süreç veya istek oluşturur. Yapılandırmayı ve süreç sayısını kontrol edin.

Dış saldırı veya botlar

Saldırı veya agresif dizinleme, çok sayıda istek oluşturarak CPU'yu yükleyebilir. Erişim günlüklerini kontrol edin ve hizmeti koruyun.

Bellek eksikliği (takas)

RAM tükendiğinde sistem takas kullanmaya başlar, bu da yükü büyük ölçüde artırır ve çalışmayı yavaşlatır. `free -h` ve `vmstat` komutlarını kontrol edin.

Takılı kalan veya bitmeyen süreçler

Bitmeyen betikler veya uzun süreli `D` durumundaki (G/Ç bekleyen) süreçler yükü artırabilir. Zombi süreçler kendi başlarına CPU tüketmez, ancak üst süreçle ilgili bir soruna işaret edebilir. Süreç listesini ve durumlarını inceleyin.

Adım adım çözüm

  1. 1

    Mevcut yükü kontrol edin

    1, 5 ve 15 dakikalık ortalama yükü görmek için uptime komutunu çalıştırın. Değerleri CPU çekirdek sayısıyla (nproc) karşılaştırın. Yük çekirdek sayısından yüksekse, özellikle CPU kullanımı da %100'e yakınsa sistem aşırı yüklenmiş olabilir.

  2. 2

    CPU tüketen süreci belirleyin

    top komutunu çalıştırın ve CPU kullanımına göre sıralamak için P tuşuna basın. %CPU ve COMMAND sütunlarına dikkat edin. Daha okunaklı bir görünüm için htop yükleyin (sudo apt install htop veya sudo dnf install htop) ve çalıştırın.

  3. 3

    Tüm süreçleri ve ayrıntılarını inceleyin

    CPU'ya göre ilk 10 süreci görmek için ps aux --sort=-%cpu | head -n 10 kullanın. Belirli bir süreç (PID) hakkında ayrıntılar için ps -p PID -o pid,ppid,cmd,%cpu,%mem kullanın.

  4. 4

    Sürecin meşru olup olmadığını kontrol edin

    Sürecin adı ve yoluna göre bilinen bir hizmete ait olup olmadığını belirleyin (ör. nginx, mysqld, php-fpm). Emin değilseniz, sürecin ne zaman başlatıldığını (ps -p PID -o lstart) ve kimin başlattığını (ps -p PID -o user) kontrol edin.

  5. 5

    Uygulama günlüklerini analiz edin

    Şüpheli hizmetin günlüklerini inceleyin: journalctl -u hizmet_adı -n 50 veya /var/log/ dizinindeki dosyalar. Hataları, tekrarlayan mesajları veya beklenmeyen istekleri arayın.

  6. 6

    Bellek ve takası kontrol edin

    free -h ve vmstat 1 5 komutlarını çalıştırın. si/so sütunları artıyorsa (aktif takas), RAM eksikliği yüksek yükün nedeni olabilir. Bellek eklemeyi veya süreç sayısını azaltmayı düşünün.

  7. 7

    Sorunlu hizmeti durdurun veya yeniden başlatın

    Hizmeti belirlediyseniz yeniden başlatın: sudo systemctl restart hizmet_adı. Süreç bilinmiyor ve şüpheliyse önce güvenli bir şekilde durdurmayı deneyin: sudo systemctl stop hizmet_adı veya sudo kill -15 PID. sudo kill -9 PID seçeneğini yalnızca son çare olarak kullanın, çünkü veri kaybına veya bozulmasına yol açabilir. Hizmet veri yazıyorsa veya veritabanı kullanıyorsa müdahaleden önce yedek alın.

  8. 8

    Hizmet için kaynakları sınırlayın

    systemd altındaki hizmetler için birim dosyasında sınırlamalar ayarlayabilirsiniz (ör. CPUQuota=50%). Birim dosyasını değiştirdikten sonra sudo systemctl daemon-reload çalıştırın ve hizmeti yeniden başlatın. PHP-FPM için pm.max_children, veritabanı için max_connections ayarlayın. Doğru parametreler için belgelere başvurun.

  9. 9

    Saldırı olup olmadığını kontrol edin

    Web sunucusunun erişim günlüklerini (/var/log/nginx/access.log veya benzeri) inceleyin ve aynı IP adresinden çok sayıda istek olup olmadığına bakın. Gerekirse güvenlik duvarı üzerinden IP'yi engelleyin (sudo ufw deny from IP) veya hız sınırlaması ayarlayın.

Hiçbir şey işe yaramazsa: daha derin analiz

Yüksek yük tekrarlanıyorsa ve hiçbir sürece atfedemiyorsanız gelişmiş araçları kullanın. pidstat -u 1 gerçek zamanlı olarak süreç başına CPU tüketimini gösterir (sysstat paketi kuruluysa). sudo iotop disk G/Ç'yi gösterir, vmstat 1 sistem kaynaklarına genel bir bakış sağlar. Ayrıntılı CPU analizi için perf top (kuruluysa) veya sürecin sistem çağrılarını görmek için strace -p PID kullanın; strace süreci yavaşlatabilir, bu yüzden kısa süreli kullanın. Ayrıca sensors veya dmesg | grep -i error ile donanım sorunu (ör. aşırı ısınma) olup olmadığını kontrol edin. Ele geçirilme şüpheniz varsa root olarak rkhunter veya chkrootkit çalıştırın ve cron görevlerini inceleyin: crontab -l yalnızca geçerli kullanıcının görevlerini gösterir, root olarak sudo crontab -l -u kullanıcı kullanabilir veya /etc/crontab, /etc/cron.* ve /var/spool/cron dosyalarını inceleyebilirsiniz.

Tekrarlanmaması için

  • Yazılımı düzenli olarak güncelleyin ve güvenlik yamalarını takip edin
  • İzleme (ör. `monit`, `netdata`) kurun ve yüksek yük için uyarılar ayarlayın
  • Hizmetler için kaynak sınırları yapılandırın (systemd, PHP-FPM, veritabanı)
  • Günlükleri inceleyin ve yük eğilimlerini analiz edin

Ne zaman uzmana başvurmalı

Süreci belirleyemiyorsanız, ele geçirilme şüpheniz varsa veya kritik hizmetlerin yapılandırmasında değişiklik yapılması gerekiyorsa bir IT uzmanına başvurun. Nedeni hızla izole edebilir ve uzun kesintileri önleyebilirler.

BT altyapı bakımı · Sunucular, ağlar, yedekleme, güvenlik ve yardım masası

Sık sorulan sorular

Ortalama yük ne anlama gelir ve hangi değer kabul edilebilir?

Ortalama yük, son 1, 5 ve 15 dakikada CPU veya G/Ç bekleyen süreçlerin ortalama sayısını gösterir. Kaba bir kural olarak, CPU çekirdek sayısına eşit veya daha az olması kabul edilebilir. Sürekli daha yüksekse sistem aşırı yüklenmiş olabilir.

Sunucuyu yeniden başlatmadan yükü geçici olarak nasıl azaltabilirim?

Sorunlu hizmeti durdurabilir veya yeniden başlatabilir, süreç için CPU kotasını geçici olarak sınırlayabilir (ör. `cpulimit`) veya gerekli olmadığından eminseniz gereksiz hizmetleri kapatabilirsiniz. Hızlı müdahale için en çok tüketen sürece `sudo kill -15 PID` kullanın; `sudo kill -9 PID` yalnızca son çare olarak ve yedek almadan üretim veritabanlarında kullanmayın.

Yüksek yük her zaman CPU sorunu mudur?

Hayır. Yüksek yük yavaş disk (G/Ç bekleme), bellek eksikliği (takas) veya çok sayıda tamamlanmamış süreçten kaynaklanabilir. Bu nedenle CPU'nun suçlu olduğuna karar vermeden önce `vmstat`, `iostat` ve `free -h` komutlarını kontrol edin.

Paylaş
Çözüm bulamadınız mı?AI BT asistanı 7/24 hizmetinizde. Sorunu anlatın veya hatanın ekran görüntüsünü gönderin, durumunuza özel talimat alın.AI BT asistanına sorun