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
Mevcut yükü kontrol edin
1, 5 ve 15 dakikalık ortalama yükü görmek için
uptimekomutunu ç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
CPU tüketen süreci belirleyin
topkomutunu çalıştırın ve CPU kullanımına göre sıralamak içinPtuşuna basın.%CPUveCOMMANDsütunlarına dikkat edin. Daha okunaklı bir görünüm içinhtopyükleyin (sudo apt install htopveyasudo dnf install htop) ve çalıştırın. - 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 10kullanın. Belirli bir süreç (PID) hakkında ayrıntılar içinps -p PID -o pid,ppid,cmd,%cpu,%memkullanın. - 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
Uygulama günlüklerini analiz edin
Şüpheli hizmetin günlüklerini inceleyin:
journalctl -u hizmet_adı -n 50veya/var/log/dizinindeki dosyalar. Hataları, tekrarlayan mesajları veya beklenmeyen istekleri arayın. - 6
Bellek ve takası kontrol edin
free -hvevmstat 1 5komutlarını çalıştırın.si/sosü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
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ıveyasudo kill -15 PID.sudo kill -9 PIDseç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
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 sonrasudo systemctl daemon-reloadçalıştırın ve hizmeti yeniden başlatın. PHP-FPM içinpm.max_children, veritabanı içinmax_connectionsayarlayın. Doğru parametreler için belgelere başvurun. - 9
Saldırı olup olmadığını kontrol edin
Web sunucusunun erişim günlüklerini (
/var/log/nginx/access.logveya 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.