Linux Sunucuda CPU Kullanımı Nasıl Kontrol Edilir? İşlemci Kullanımı Rehberi
Linux sunucuda CPU kullanımını kontrol etmek için en pratik yöntemlerden biri top komutudur. Bu komut işlemci kullanımını, çalışan process'leri, RAM durumunu ve sistem yükünü gerçek zamanlı olarak gösterir.
SSH ile sunucuya bağlandıktan sonra:
topkomutunu çalıştırabilirsiniz.
CPU sürekli yüksek görünüyorsa hangi process'in işlemciyi kullandığını bulmak gerekir. Node.js, PostgreSQL, Nginx veya başka bir servis yüksek CPU tüketebilir; ancak yüksek kullanım her zaman bir problem olduğu anlamına gelmez.
top komutu nasıl kullanılır?
Terminalde:
topçalıştırıldığında sistemin anlık durumu görüntülenir.
Üst bölümde genellikle:
- Load average
- CPU kullanımı
- RAM kullanımı
- Swap
- Process sayısı
- Sistem çalışma süresi
gibi bilgiler bulunur.
Alt bölümde ise çalışan process'ler listelenir.
Buradaki
%CPU sütunu hangi process'in işlemciyi ne kadar kullandığını anlamak için önemlidir.CPU satırındaki değerler ne anlama gelir?
top çıktısında CPU kullanımında farklı kategoriler bulunabilir.Bunlardan yaygın olanları:
us: Kullanıcı alanındaki uygulamaların CPU kullanımı.
sy: Kernel ve sistem işlemlerinin CPU kullanımı.
id: İşlemcinin boşta kaldığı süre.
wa: I/O işlemlerinin tamamlanmasının beklendiği süre.
Örneğin
id değeri çok düşükse CPU yoğun şekilde kullanılıyor olabilir.Ancak
wa yüksekse sorun doğrudan işlemci gücünden ziyade disk veya başka I/O işlemleriyle ilişkili olabilir.En fazla CPU kullanan process nasıl bulunur?
Şu komut kullanılabilir:
ps aux --sort=-%cpu | headBu komut yüksek CPU kullanan process'leri üst sıralarda gösterir.
Daha fazla kayıt görmek isterseniz:
ps aux --sort=-%cpu | head -20kullanabilirsiniz.
Listede:
- Kullanıcı
- PID
- CPU yüzdesi
- RAM yüzdesi
- Process adı
gibi bilgiler görülebilir.
htop ile CPU kullanımı nasıl kontrol edilir?
Sunucuda
htop kuruluysa:htopkomutuyla daha görsel bir arayüz kullanabilirsiniz.
Ubuntu veya Debian tabanlı sistemlerde kurulum için:
sudo apt updatesudo apt install htopkullanılabilir.
htop, her CPU çekirdeğinin kullanımını ayrı ayrı takip etmeyi kolaylaştırır.Ayrıca process'leri CPU veya RAM kullanımına göre sıralayabilirsiniz.
CPU kullanımı %100 olması normal mi?
Duruma göre normal olabilir.
Örneğin:
- Yazılım derlenirken
- Büyük dosya sıkıştırılırken
- Yoğun veritabanı sorgusu çalışırken
- Çok sayıda istek işlenirken
- Yedek alınırken
CPU kısa süreli olarak %100 seviyesine ulaşabilir.
Sorun, kullanımın uzun süre yüksek kalması ve sistem performansını etkilemesidir.
Bu durumda hangi process'in kaynak tükettiği araştırılmalıdır.
Bir process neden %100'den fazla CPU kullanıyor?
Çok çekirdekli Linux sistemlerinde bazı izleme araçlarında bir process'in CPU kullanımı %100'ün üzerinde görünebilir.
Örneğin dört mantıksal CPU bulunan bir sistemde araç ve hesaplama yöntemine bağlı olarak bir process:
150%veya:
250%gibi değerler gösterebilir.
Bu, process'in birden fazla CPU kapasitesinden yararlanmasıyla ilişkili olabilir.
Bu nedenle CPU yüzdesini değerlendirirken sunucudaki mantıksal CPU sayısını da bilmek önemlidir.
Kontrol için:
nprockullanabilirsiniz.
Örneğin sonuç:
4ise sistem dört kullanılabilir işlem birimi bildiriyor demektir.
Load Average nedir?
top veya uptime komutunda:load averagedeğerleri bulunur.
Örneğin:
load average: 0.50, 0.80, 1.10Bu değerler sırasıyla yaklaşık son:
- 1 dakika
- 5 dakika
- 15 dakika
içindeki sistem yükünü gösterir.
Linux load average yalnızca doğrudan CPU yüzdesi değildir; çalışmaya hazır veya bazı kesintisiz bekleme durumundaki görevleri de yansıtabilir.
Bu nedenle load average ile CPU yüzdesi aynı şey değildir.
Load Average kaç olmalı?
Tek başına sabit bir sayı bütün sunucular için geçerli değildir.
Örneğin 1 CPU'lu bir sunucu ile 16 CPU'lu bir sunucuda:
load average: 4.00aynı anlama gelmez.
Önce:
nprocile CPU sayısını kontrol edin.
Load değeri uzun süre kullanılabilir CPU kapasitesinin üzerinde kalıyorsa sistemde darboğaz bulunup bulunmadığını araştırmak gerekir.
Ancak yalnızca load değerine bakarak kesin teşhis konulmamalıdır.
Node.js uygulaması yüksek CPU kullanıyorsa
PM2 kullanıyorsanız:
pm2 statuskomutuyla uygulamaların CPU kullanımını görebilirsiniz.
Belirli bir uygulamanın detayları için:
pm2 describe uygulama-adikullanılabilir.
CPU sürekli yüksekse:
- Sonsuz döngü
- Yoğun hesaplama
- Çok fazla trafik
- Verimsiz kod
- Büyük JSON işlemleri
- Senkron ve CPU yoğun işlemler
- Çok sık çalışan görevler
araştırılabilir.
PM2 uygulamasını restart etmek çözüm mü?
Geçici olarak CPU kullanımını düşürebilir ancak problemin nedenini ortadan kaldırmayabilir.
Örneğin kod içerisinde sonsuz döngü varsa uygulama yeniden başladıktan sonra aynı problem tekrar ortaya çıkar.
Bu nedenle:
pm2 restart uygulama-adiyalnızca geçici müdahale olarak değerlendirilmelidir.
Kalıcı çözüm için loglar ve uygulama davranışı incelenmelidir.
PM2 loglarını kontrol edin
CPU artışıyla birlikte uygulamada hata oluşuyorsa:
pm2 logs uygulama-adikullanabilirsiniz.
Aynı hatanın saniyede yüzlerce kez tekrarlandığını görüyorsanız uygulama hem CPU hem disk kullanımını artırabilir.
Bu durumda logu temizlemek yerine hatanın kaynağını düzeltmek gerekir.
PostgreSQL yüksek CPU kullanıyorsa
PostgreSQL process'lerinin yüksek CPU kullanması yoğun veya verimsiz sorgularla ilişkili olabilir.
Örneğin:
- Büyük tabloda uygun indeks olmaması
- Çok sayıda eş zamanlı sorgu
- Ağır sıralama işlemleri
- Karmaşık sorgular
- Uygulamanın gereksiz sorgu üretmesi
CPU kullanımını artırabilir.
PostgreSQL process'ini rastgele sonlandırmak yerine aktif sorgular ve veritabanı performansı araştırılmalıdır.
Nginx yüksek CPU kullanıyorsa
Nginx normal şartlarda oldukça verimli çalışabilir. Ancak yüksek trafik veya belirli sorunlar CPU kullanımını artırabilir.
Örneğin:
- Çok yüksek istek sayısı
- Bot trafiği
- Hatalı yönlendirme döngüleri
- Yoğun TLS işlemleri
- Büyük miktarda statik trafik
- Uygulama veya ağ kaynaklı olağan dışı durumlar
incelenebilir.
Nginx access ve error logları trafik davranışını anlamaya yardımcı olabilir.
CPU yüksek ama site neden yavaş olmayabilir?
Kısa süreli CPU artışları kullanıcıların fark edeceği bir probleme dönüşmeyebilir.
Örneğin birkaç saniyelik:
%100kullanımın ardından sistem tekrar normale dönüyorsa bu olağan bir iş yükü olabilir.
Asıl dikkat edilmesi gereken:
- CPU'nun sürekli yüksek kalması
- Load average değerinin sürekli artması
- Yanıt sürelerinin yükselmesi
- Uygulamaların zaman aşımına uğraması
- SSH bağlantısının yavaşlaması
gibi belirtilerdir.
CPU düşük ama site neden yavaş olabilir?
Site yavaşlığının nedeni her zaman CPU değildir.
CPU %20 seviyesinde olsa bile:
- Disk I/O
- Veritabanı
- Ağ gecikmesi
- Harici API
- DNS
- Uygulama kilitlenmesi
- Yetersiz RAM ve yoğun swap
gibi nedenler performansı etkileyebilir.
Bu nedenle yalnızca CPU yüzdesine bakarak sunucunun sağlıklı olduğuna karar verilmemelidir.
I/O wait neden önemlidir?
top çıktısındaki wa değeri I/O bekleme durumunu anlamaya yardımcı olabilir.wa sürekli yüksekse CPU işlemleri tamamlamak yerine depolama gibi I/O kaynaklarını bekliyor olabilir.Bu durumda problem:
- Yavaş disk
- Çok yoğun disk işlemi
- Veritabanı I/O yükü
- Yedekleme
- Yoğun log yazımı
ile ilişkili olabilir.
CPU yükseltmek böyle bir problemi her zaman çözmez.
Tek bir CPU çekirdeği %100 olabilir mi?
Evet.
Bazı uygulamalar bütün çekirdekleri eşit şekilde kullanmaz.
Örneğin çok çekirdekli bir sunucuda:
- Bir çekirdek %100
- Diğerleri %10
seviyesinde olabilir.
Toplam CPU yüzdesi düşük görünse bile tek çekirdeğe bağımlı bir iş darboğaz yaşayabilir.
htop gibi araçlar çekirdek kullanımını ayrı ayrı görmeyi kolaylaştırır.CPU kullanımını sürekli takip etmek neden önemli?
Sorun yaşandığı anda SSH ile bağlanıp
top çalıştırmak her zaman yeterli olmayabilir.Örneğin CPU gece 03.00'te birkaç dakika %100 oluyor ve sonra normale dönüyorsa siz kontrol ettiğinizde problem görünmeyebilir.
Bu tür durumlarda zaman içerisinde metrik toplayan bir monitoring sistemi kullanmak faydalıdır.
Takip edilebilecek metrikler:
- CPU kullanımı
- Load average
- RAM
- Swap
- Disk
- Disk I/O
- Ağ trafiği
- Uygulama yanıt süreleri
olabilir.
CPU yüksekse process'i hemen kill etmek doğru mu?
Genellikle önce process'in ne olduğunu anlamak gerekir.
Örneğin yüksek CPU kullanan process:
- PostgreSQL
- Nginx
- Backup işlemi
- Sistem servisi
- Node.js uygulaması
olabilir.
Process'i doğrudan öldürmek hizmet kesintisine veya veri kaybına neden olabilir.
Önce PID ve process bilgilerini kontrol edin.
Örneğin:
ps -p PID -o pid,ppid,user,%cpu,%mem,etime,cmdkomutu belirli bir process hakkında ayrıntılı bilgi gösterebilir.
CPU kullanımında ani artış varsa neler kontrol edilmeli?
Şu sıra kullanılabilir:
1.
top ile genel duruma bakın.2.
nproc ile CPU sayısını öğrenin.3. Load average değerlerini kontrol edin.
4. En fazla CPU kullanan process'i bulun.
5. Process'in hangi uygulamaya ait olduğunu belirleyin.
6. PM2 kullanıyorsanız uygulama durumunu kontrol edin.
7. Uygulama loglarını inceleyin.
8. Veritabanı yükünü kontrol edin.
9. Nginx loglarında olağan dışı trafik olup olmadığına bakın.
10. CPU artışının sürekli mi geçici mi olduğunu belirleyin.
Linux CPU kontrolü için kullanışlı komutlar
Gerçek zamanlı sistem takibi:
topDaha görsel takip:
htopCPU sayısı:
nprocSistem yükü:
uptimeEn yüksek CPU kullanan process'ler:
ps aux --sort=-%cpu | headBelirli process'i incelemek:
ps -p PID -o pid,ppid,user,%cpu,%mem,etime,cmdPM2 uygulamaları:
pm2 statusSık yapılan hatalar
CPU problemi araştırılırken şu hatalardan kaçınılmalıdır:
- Her %100 kullanımını arıza sanmak
- CPU çekirdek sayısını hesaba katmamak
- Load average ile CPU yüzdesini aynı şey sanmak
- Yüksek I/O wait değerini görmezden gelmek
- Process'i ne olduğunu bilmeden kill etmek
- PM2 uygulamasını sürekli restart ederek asıl problemi gizlemek
- Veritabanı sorgularını incelememek
- Bot veya anormal trafik ihtimalini kontrol etmemek
- Tek seferlik ölçüme bakarak karar vermek
Özetle, Linux sunucuda CPU kullanımını kontrol etmek için
top, htop ve ps komutları kullanılabilir. Ancak yüksek CPU gördüğünüzde yalnızca yüzdeye odaklanmak yerine CPU sayısını, load average değerini, I/O wait durumunu ve kaynak tüketen process'i birlikte değerlendirmek gerekir.Kalıcı çözüm için en önemli adım hangi process'in CPU tükettiğini ve bu tüketimin neden oluştuğunu bulmaktır.
