İçeriğe Atla
Mustafa Erbay
Rehberler · 11 dk okuma · görüntülenme Read in English
100%

Docker Container'larım Neden Yavaşladı? Kendi VPS'imde İzleme Rehberi

Kendi VPS'inizdeki Docker container'larının performansını izleme ve yavaşlamaların nedenlerini bulma üzerine pratik bir rehber. Systemd, cgroup ve journald…

VPS sunucusunda çalışan Docker container'larının performansını izleyen bir kişinin ekran görüntüsü.

Container’larımın ne zaman yavaşladığını anlamak için bir rehber hazırladım. Bu yazıda, kendi VPS’imde Docker container’larının performansını nasıl izlediğimi adım adım anlatacağım. Kimi zaman basit bir ayar değişikliği, kimi zaman da altta yatan sistem kaynaklarının yetersizliği performansı ciddi şekilde etkileyebiliyor. Bu süreci sistemli bir şekilde yönetmek, olası sorunları erkenden tespit etmek ve çözmek için kritik.

Özellikle kendi sunucularımda çalışan uygulamaların performans takibi benim için önemli. Docker’ın sunduğu izolasyon ve taşınabilirlik harika olsa da, bu container’ların altında yatan sistem kaynaklarını doğru yönetmek ve izlemek gerekiyor. Bu rehberde, bu süreci nasıl yönettiğimi ve karşılaştığım tipik sorunları nasıl çözdüğümü paylaşacağım.

Container Performansını İzleme Temelleri

Bir Docker container’ının yavaşlamasının birçok nedeni olabilir. Bunlar arasında CPU kullanımı, bellek tüketimi, I/O darboğazları veya ağ gecikmeleri gibi faktörler yer alır. İlk adım, bu temel metrikleri sistemli bir şekilde toplamak ve analiz etmektir. Kendi VPS’imde bu izlemeyi yaparken genellikle systemd, cgroup ve journald gibi araçlardan faydalanıyorum.

Bu araçlar, container’ların ve altında çalıştıkları ana sistemin kaynak kullanımlarını anlamak için güçlü bir temel sunar. Özellikle cgroup’lar, container’ların ne kadar CPU, bellek ve diğer kaynakları kullanabileceğini sınırlamak ve izlemek için kullanılır. journald ise sistem ve servis loglarını merkezi bir yerde toplar, bu da hata ayıklama sürecini inanılmaz derecede kolaylaştırır.

Systemd Unit’leri ve Container Yönetimi

Docker servisleri genellikle systemd tarafından yönetilir. Bu, container’larınızın başlatılması, durdurulması ve yeniden başlatılması gibi işlemlerin systemd üzerinden kontrol edilebileceği anlamına gelir. Container’larınızı tek tek izlemek yerine, ana servislerini ve onların kaynak kullanımlarını takip etmek daha verimli olabilir.

systemd unit dosyalarını inceleyerek, servislerin nasıl başlatıldığını, hangi bağımlılıklara sahip olduğunu ve hangi kaynak limitlerinin uygulandığını görebilirsiniz. Bu, özellikle container’larınızın beklenen şekilde çalışmadığı durumlarda sorunun kaynağını bulmak için iyi bir başlangıç noktasıdır.

systemctl status docker
systemctl status containerd

Bu komutlar, Docker daemon’unun ve container runtime’ının durumunu gösterir. Eğer bu servisler düzgün çalışmıyorsa, altında çalışan container’lar da etkilenecektir.

Cgroup ile Kaynak Limitlerini Anlama

Container’ların performansını anlamanın en önemli yollarından biri, cgroup (control groups) aracılığıyla kaynak kullanımlarını izlemektir. Docker, container’ları izole etmek ve kaynaklarını yönetmek için cgroup’ları kullanır. Her container için ayrı bir cgroup oluşturulur ve bu sayede CPU, bellek, disk I/O gibi kaynaklar üzerinde ince ayar yapabilirsiniz.

cgroup’ları doğrudan incelemek biraz karmaşık olabilir, ancak docker stats komutu bu bilgiyi daha anlaşılır bir şekilde sunar. Bu komut, çalışan container’larınızın gerçek zamanlı CPU, bellek, ağ G/Ç ve disk G/Ç istatistiklerini gösterir.

docker stats

Bu komutun çıktısını düzenli olarak kontrol etmek, hangi container’ın en fazla kaynağı tükettiğini anlamanıza yardımcı olur. Eğer bir container sürekli olarak CPU’nun yüksek bir yüzdesini kullanıyorsa veya bellek kullanımında ani artışlar gözlemliyorsanız, bu o container’da bir performans sorunu olduğuna işaret edebilir.

Journald ile Log Analizi

Container’larınızın veya altında çalışan servislerin davranışını anlamak için loglar kritik öneme sahiptir. journald, Linux sistemlerinde logları toplamak ve yönetmek için kullanılan merkezi bir servistir. Docker container’ları da loglarını journald üzerinden üretebilir. Bu sayede, sadece container’ın kendi loglarını değil, aynı zamanda host sistemindeki ilgili servislerin loglarını da tek bir yerden inceleyebilirsiniz.

journalctl komutu, journald tarafından toplanan logları sorgulamak ve filtrelemek için kullanılır. Belirli bir container’ın loglarını görmek veya belirli bir zaman aralığındaki hata mesajlarını incelemek için bu komutu kullanabilirsiniz.

journalctl -u docker.service -f
journalctl -u container-your-container-name.service -f
journalctl --since "2026-05-12 00:00:00" --until "2026-05-13 00:00:00"

İlk komut Docker servisinin canlı loglarını gösterirken, ikincisi belirli bir container servisi için aynı işlevi görür (eğer container’ı systemd servisi olarak yönetiyorsanız). Üçüncü komut ise belirli bir tarih aralığındaki tüm sistem loglarını getirir. Bu loglar, yavaşlamanın nedenini anlamak için ipuçları sunabilir. Örneğin, sık sık tekrar eden hata mesajları veya beklenmedik uyarılar performans sorunlarına işaret edebilir.

Yaygın Yavaşlama Nedenleri ve Çözümleri

Şimdiye kadar temel izleme araçlarını ve yöntemlerini ele aldık. Şimdi, kendi VPS’imde karşılaştığım ve sıkça rastlanan bazı yavaşlama nedenlerine ve bunların nasıl çözüldüğüne odaklanalım. Bu senaryolar, genel bir rehber olmanın ötesinde, pratik uygulamalar sunmayı amaçlıyor.

CPU Darboğazları

Eğer docker stats çıktısında bir container’ın sürekli olarak yüksek CPU kullanımına sahip olduğunu görüyorsanız, bu durum birkaç nedenden kaynaklanabilir. Uygulamanın kendisi yoğun işlem gücü gerektirebilir veya sonsuz bir döngüye girmiş olabilir. Bazen de, container’a ayrılan CPU kaynağı yetersiz kalmış olabilir.

Bu durumda ilk yapılması gereken, o container’ın içinde çalışan uygulamanın ne kadar CPU kullandığını anlamaktır. Gerekirse, daha detaylı bir analiz için top veya htop gibi araçları container içinde çalıştırabilirsiniz. Eğer sorun uygulamanın kendisindeyse, optimizasyon gerekebilir. Eğer sorun kaynak yetersizliğiyse, container’a daha fazla CPU kaynağı ayırmanız gerekebilir.

Bellek Sızıntıları (Memory Leaks)

Bellek sızıntıları, bir uygulamanın kullandığı belleği işlem tamamlandıktan sonra geri bırakmaması durumudur. Zamanla bu durum, container’ın belleğini tamamen doldurabilir ve sistemin genel performansını düşürebilir. docker stats komutu, bellek kullanımındaki sürekli artışı fark etmenizi sağlar.

Eğer bir bellek sızıntisinden şüpheleniyorsanız, sorunu tespit etmek için container içindeki uygulamanın bellek kullanımını izlemeniz gerekir. Çoğu programlama dili için bellek profilleme araçları mevcuttur. Bu araçlar, hangi kod parçalarının en çok bellek kullandığını ve belleğin neden geri bırakılmadığını anlamanıza yardımcı olur.

Disk I/O Darboğazları

Yoğun disk okuma/yazma işlemleri de container’ların yavaşlamasına neden olabilir. Özellikle veritabanı işlemleri, loglama veya büyük dosyaların işlenmesi gibi operasyonlar disk I/O’sunu artırabilir. docker stats komutu, disk G/Ç metriklerini de gösterir.

Eğer disk I/O’su yüksekse, sorunun kaynağını bulmak için hangi işlemlerin bu yoğunluğa neden olduğunu belirlemeniz gerekir. Bu, veritabanı sorgularını optimize etmek, loglama seviyelerini ayarlamak veya daha hızlı depolama çözümlerine geçmek gibi adımları içerebilir. Kendi VPS’imde, özellikle yoğun veritabanı operasyonları sırasında disk I/O’sunun arttığını gözlemledim. Bu durumlarda, iotop gibi araçlarla hangi işlemlerin en çok disk kullandığını tespit etmek faydalı oldu.

Ağ Gecikmeleri ve Konfigürasyon Sorunları

Container’lar arasındaki veya container ile dış dünya arasındaki ağ iletişimi de performans sorunlarına yol açabilir. DNS çözümleme sorunları, MTU (Maximum Transmission Unit) uyuşmazlıkları veya yanlış yapılandırılmış ağ köprüleri (bridge networks) gecikmelere neden olabilir.

Ağ sorunlarını teşhis etmek için ping, traceroute gibi standart ağ araçlarını kullanabilirsiniz. Container’ların ağ ayarlarını ve IP adresi çakışmalarını kontrol etmek de önemlidir. Özellikle birden fazla container’ın aynı ağ üzerinde çalıştığı durumlarda, ağ yapılandırmasının doğru yapıldığından emin olmak gerekir.

Kendi VPS’imde Uyguladığım İzleme Stratejileri

Kendi VPS’imde çalıştırdığım container’ların performansını yönetirken, birkaç temel stratejiyi benimsedim. Bu stratejiler, proaktif bir yaklaşım benimsememi ve sorunları erkenden tespit etmemi sağlıyor.

1. Temel Metriklerin Düzenli Takibi

Her gün, docker stats komutunu çalıştırarak çalışan tüm container’larımın temel metriklerini kontrol ederim. CPU, bellek, ağ G/Ç ve disk G/Ç değerlerindeki anormal artışlar veya düşüşler hemen dikkatimi çeker. Bu basit ama etkili yöntem, potansiyel sorunları daha büyümeden fark etmemi sağlıyor.

Ayrıca, systemd servislerinin durumunu da düzenli olarak kontrol ederim. systemctl status <service-name> komutu, servislerin aktif olup olmadığını ve herhangi bir hata mesajı olup olmadığını gösterir.

2. Loglama ve Hata Ayıklama

journald’yi aktif olarak kullanıyorum. Tüm servislerim ve container’larım için detaylı loglama ayarladım. Özellikle kritik servisler için journalctl komutu ile belirli anahtar kelimeleri veya hata kodlarını arayarak logları incelerim. Bu, sorunun kök nedenini bulmak için genellikle en hızlı yoldur.

3. Kaynak Limitlerinin Ayarlanması

Container’larıma uygun kaynak limitleri belirlemek, hem diğer container’ların performansını korumak hem de ana sunucunun kararlılığını sağlamak için önemlidir. --cpus ve --memory gibi parametreleri docker run komutunda veya docker-compose.yml dosyasında dikkatlice ayarlıyorum. Bu limitleri belirlerken, uygulamanın gerçek ihtiyaçlarını göz önünde bulunduruyorum.

4. Otomatik Uyarı Sistemleri

Daha karmaşık sistemler için, Prometheus ve Grafana gibi araçlarla entegre edilmiş otomatik uyarı sistemleri kurmak faydalı olabilir. Bu sistemler, belirli metrikler belirli eşikleri aştığında beni e-posta veya başka bildirim kanallarıyla uyarır. Kendi VPS’imde bu tür bir sistem henüz kurmamış olsam da, daha büyük ölçekli projelerde kesinlikle tercih ettiğim bir yöntemdir.

Sonuç ve Sonraki Adımlar

Kendi VPS’imde Docker container’larının performansını izlemek, sürekli öğrenme ve ayarlama gerektiren bir süreçtir. Bu rehberde paylaştığım yöntemler, temel metrikleri izlemekten logları analiz etmeye ve kaynak limitlerini ayarlamaya kadar geniş bir yelpazeyi kapsıyor.

Bu adımları takip ederek, container’larınızın neden yavaşladığını daha kolay anlayabilir ve performansı optimize edebilirsiniz. Unutmayın ki her sistem benzersizdir ve sizin özel ihtiyaçlarınıza göre bu yöntemleri adapte etmeniz gerekebilir.

Bir sonraki adım, bu izleme verilerini kullanarak uygulamalarınızı daha da optimize etmek ve proaktif olarak performans sorunlarını önlemektir.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Docker container'larımın performansını izlemek için hangi araçları kullanmalıyım?
Ben genellikle `systemd`, `cgroup` ve `journald` gibi araçlardan faydalanıyorum. Bu araçlar, container'ların ve altında çalıştıkları ana sistemin kaynak kullanımlarını anlamak için güçlü bir temel sunar.
Container'larımın yavaşlamasına neden olan temel faktörler nelerdir?
Benim deneyimime göre, container'larımın yavaşlamasına neden olan temel faktörler CPU kullanımı, bellek tüketimi, I/O darboğazları veya ağ gecikmeleri gibi faktörlerdir. Bu metrikleri sistemli bir şekilde toplamak ve analiz etmek önemlidir.
Container'ların kaynak kullanımlarını sınırlamak ve izlemek için hangi aracı kullanmalıyım?
Ben `cgroup`'ları kullanıyorum. `cgroup`'lar, container'ların ne kadar CPU, bellek ve diğer kaynakları kullanabileceğini sınırlamak ve izlemek için kullanılır. Bu, container'larımın performansını yönetmek ve olası sorunları erkenden tespit etmek için kritik bir araçtır.
Sistem ve servis loglarını merkezi bir yerde toplamak için hangi aracı kullanmalıyım?
Ben `journald` kullanıyorum. `journald`, sistem ve servis loglarını merkezi bir yerde toplar, bu da hata ayıklama sürecini inanılmaz derecede kolaylaştırır. Bu, container'larımın performansını izlemek ve sorunları çözmek için bana büyük bir yardım sağlar.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Haftalık özet — AI değil, bizzat ben seçiyorum

Haftada bir mail: o haftanın en önemli yazısı, perde arkası notları, ve "bu hafta gerçekten kullandığım araç" bölümü. Az gürültü, çok sinyal.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar