- Konu sahibi
- #1
İlk olarak
SSH ile sunucuya bağlandıktan sonra aşağıdaki komutu çalıştırın:
Çıktıdaki
Hangi işlemlerin RAM kullandığını görmek için:
Daha ayrıntılı anlık izleme için
Önce işlemin hangi systemd hizmetine ait olduğunu kontrol edin. Örnek olarak PID değeri 1234 ise:
Bu komut hizmet adını göstermiyorsa işlemin komut satırını ve açık dosyalarını inceleyin. Hizmet adı belirlendikten sonra yapılandırma dosyasını değiştirin, yapılandırmayı doğrulayın ve kontrollü biçimde yeniden başlatın. Değişiklikten önce dosyanın yedeğini alın:
Kullanılmayan servisleri kaldırmak yerine önce durdurup etkisini gözlemleyin:
Bellek kullanımı düşüyor ve bu hizmete ihtiyaç olmadığı kesinleşiyorsa açılışta otomatik başlamasını da kapatabilirsiniz:
Üretim sunucusunda bir hizmeti kapatmadan önce web sitesi, e-posta, veritabanı, yedekleme, izleme veya güvenlik işlemlerinden hangilerinin ona bağlı olduğunu kontrol edin. Yanlış servisi kapatmak bellek sorununu çözmek yerine uygulamayı erişilemez hâle getirebilir.
Web sunucularında bellek tüketiminin yaygın nedeni fazla işçidir. Apache, PHP-FPM veya benzeri hizmetlerde işçi sayısı artırıldıkça aynı anda daha fazla istek işlenir; ancak her işçi kendi belleğini kullanabildiği için toplam tüketim de yükselir. Bu nedenle işçi sayısını azaltırken istek kuyruğu, yanıt süresi ve hata oranını birlikte izleyin. Sadece RAM kullanımını düşürmek için değeri aşırı azaltmak, bu kez isteklerin beklemesine veya zaman aşımına neden olabilir.
Veritabanlarında önbellek boyutunu düşürmek RAM’i azaltabilir; fakat sorguların diske daha sık başvurmasına ve performansın düşmesine yol açabilir. Bu ayarları değiştirirken yalnızca
Aşağıdaki ayrım, gördüğünüz sonuca göre hangi yola ilerlemeniz gerektiğini gösterir.
Takas alanı, RAM yetmediğinde daha yavaş olan disk alanının kullanılmasını sağlar. Kullanımın sıfır olmaması tek başına arıza değildir; ancak bellek baskısı sırasında takas sürekli büyüyor ve sistem yavaşlıyorsa RAM talebi mevcut kapasiteyi aşıyor olabilir.
Durumu görmek için:
Çekirdeğin bellek yetersizliği nedeniyle işlem sonlandırıp sonlandırmadığını kontrol edin:
Kayıtlarda OOM mesajı varsa sorun yalnızca Linux önbelleği değildir. Hangi işlem veya hizmetin sonlandırıldığını, olayın saatini ve o sırada sunucudaki trafiği belirleyin. Aynı olay tekrarlanıyorsa uygulama limitlerini düşürmek, gereksiz hizmetleri kaldırmak, yükü dağıtmak veya fiziksel/ sanal RAM’i artırmak arasında karar verin. Takas alanını büyütmek ani çökme riskini azaltabilir; fakat RAM yetersizliğini tamamen ortadan kaldırmaz ve yoğun takas kullanımında performans sorununu çözmez.
Güvenli yaklaşım, önce ölçmek, en çok tüketen hizmeti belirlemek, yalnızca ilgili yapılandırmayı değiştirmek ve ardından aynı yük altında sonucu karşılaştırmaktır. Değişiklikten sonra
free -h ve top ile belleğin gerçekten tükendiğini, yoksa Linux’un kullanılmayan RAM’i önbellek olarak değerlendirdiğini ayırın. Gerçek bellek baskısı varsa en çok RAM kullanan işlemi belirleyip uygulamanın yapılandırmasını küçültün veya gereksiz servisi durdurun; yalnızca önbelleği silmek kalıcı çözüm değildir. İşlemden sonra aynı ölçümleri tekrarlayarak available belleğin yükselip yükselmediğini ve takas alanı kullanımının artıp artmadığını kontrol edin.Önce bellek kullanımının nedenini belirleyin
SSH ile sunucuya bağlandıktan sonra aşağıdaki komutu çalıştırın:
Bash:
free -h
Çıktıdaki
available değeri, yeni bir işlem için yaklaşık ne kadar belleğin kullanılabilir olduğunu gösterir. used değerinin yüksek olması tek başına sorun anlamına gelmez; Linux, boş RAM’i disk önbelleği olarak kullanabilir. available düşükse, sistem takas alanını yoğun kullanıyorsa veya işlemler bellek yetersizliği nedeniyle sonlandırılıyorsa gerçek bellek baskısı vardır.Hangi işlemlerin RAM kullandığını görmek için:
Bash:
ps -eo pid,ppid,%mem,rss,comm,args --sort=-rss | head -n 15
RSS, işlemin RAM’de tuttuğu yaklaşık fiziksel bellek miktarıdır. En üstte görünen işlem her zaman hatalı değildir; veritabanı, PHP-FPM, Java veya web sunucusu gibi hizmetler iş yüküne bağlı olarak yüksek bellek kullanabilir. İşlemi sonlandırmadan önce PID, komut satırı ve hangi hizmete ait olduğu doğrulanmalıdır.Daha ayrıntılı anlık izleme için
top komutunu çalıştırın. M tuşuna basarak işlemleri bellek kullanımına göre sıralayabilirsiniz. Bir işlem zamanla sürekli büyüyorsa bellek sızıntısı veya sınırsız işçi/önbellek yapılandırması araştırılmalıdır; tek bir anda yüksek görünmesi ise yoğun fakat normal bir işlem olabilir.Belleği kullanan hizmete göre doğru ayarı yapın
Önce işlemin hangi systemd hizmetine ait olduğunu kontrol edin. Örnek olarak PID değeri 1234 ise:
Bash:
systemctl status 1234
Bu komut hizmet adını göstermiyorsa işlemin komut satırını ve açık dosyalarını inceleyin. Hizmet adı belirlendikten sonra yapılandırma dosyasını değiştirin, yapılandırmayı doğrulayın ve kontrollü biçimde yeniden başlatın. Değişiklikten önce dosyanın yedeğini alın:
Bash:
sudo cp /etc/ornek-hizmet/ornek.conf /etc/ornek-hizmet/ornek.conf.bak
Kullanılmayan servisleri kaldırmak yerine önce durdurup etkisini gözlemleyin:
Bash:
sudo systemctl stop servis_adi
sudo systemctl status servis_adi
Bellek kullanımı düşüyor ve bu hizmete ihtiyaç olmadığı kesinleşiyorsa açılışta otomatik başlamasını da kapatabilirsiniz:
Bash:
sudo systemctl disable servis_adi
Üretim sunucusunda bir hizmeti kapatmadan önce web sitesi, e-posta, veritabanı, yedekleme, izleme veya güvenlik işlemlerinden hangilerinin ona bağlı olduğunu kontrol edin. Yanlış servisi kapatmak bellek sorununu çözmek yerine uygulamayı erişilemez hâle getirebilir.
Web sunucularında bellek tüketiminin yaygın nedeni fazla işçidir. Apache, PHP-FPM veya benzeri hizmetlerde işçi sayısı artırıldıkça aynı anda daha fazla istek işlenir; ancak her işçi kendi belleğini kullanabildiği için toplam tüketim de yükselir. Bu nedenle işçi sayısını azaltırken istek kuyruğu, yanıt süresi ve hata oranını birlikte izleyin. Sadece RAM kullanımını düşürmek için değeri aşırı azaltmak, bu kez isteklerin beklemesine veya zaman aşımına neden olabilir.
Veritabanlarında önbellek boyutunu düşürmek RAM’i azaltabilir; fakat sorguların diske daha sık başvurmasına ve performansın düşmesine yol açabilir. Bu ayarları değiştirirken yalnızca
free -h sonucuna değil, sorgu süresine, disk kullanımına ve uygulama yanıt süresine de bakın.Aşağıdaki ayrım, gördüğünüz sonuca göre hangi yola ilerlemeniz gerektiğini gösterir.
| Gözlenen durum | Anlamı | Sonraki işlem |
|---|---|---|
used yüksek, available yeterli | RAM’in önemli bölümü önbellek olabilir; tek başına bellek sorunu kanıtlanmaz. | İşlemleri ve takas kullanımını izleyin; önbelleği zorla temizlemeyin. |
available düşük, takas kullanımı artıyor | Sistem RAM baskısı yaşıyor olabilir. | En çok RAM kullanan hizmeti belirleyip işçi, önbellek veya uygulama ayarını azaltın. |
| Tek bir işlem zamanla büyüyor | Bellek sızıntısı veya birikerek büyüyen önbellek ihtimali vardır. | İşlemi zaman içinde izleyin, günlükleri inceleyin ve ilgili yazılımı güncelleyin veya yeniden başlatma planı oluşturun. |
| İşlem aniden sonlandırılıyor | Çekirdek veya hizmet yöneticisi bellek yetersizliği nedeniyle işlem seçmiş olabilir. | Günlüklerde OOM kayıtlarını arayın ve yükün hangi hizmetten geldiğini belirleyin. |
Takas alanını ve çekirdek günlüklerini kontrol edin
Takas alanı, RAM yetmediğinde daha yavaş olan disk alanının kullanılmasını sağlar. Kullanımın sıfır olmaması tek başına arıza değildir; ancak bellek baskısı sırasında takas sürekli büyüyor ve sistem yavaşlıyorsa RAM talebi mevcut kapasiteyi aşıyor olabilir.
Durumu görmek için:
Bash:
swapon --show
free -h
Çekirdeğin bellek yetersizliği nedeniyle işlem sonlandırıp sonlandırmadığını kontrol edin:
Bash:
sudo journalctl -k -b | grep -i -E 'out of memory|oom|killed process'
Kayıtlarda OOM mesajı varsa sorun yalnızca Linux önbelleği değildir. Hangi işlem veya hizmetin sonlandırıldığını, olayın saatini ve o sırada sunucudaki trafiği belirleyin. Aynı olay tekrarlanıyorsa uygulama limitlerini düşürmek, gereksiz hizmetleri kaldırmak, yükü dağıtmak veya fiziksel/ sanal RAM’i artırmak arasında karar verin. Takas alanını büyütmek ani çökme riskini azaltabilir; fakat RAM yetersizliğini tamamen ortadan kaldırmaz ve yoğun takas kullanımında performans sorununu çözmez.
Önbelleği zorla temizlemek neden kalıcı çözüm değildir?
sync ve /proc/sys/vm/drop_caches üzerinden önbellek temizlemek bazı testlerde kullanılabilir; ancak bunu düzenli bellek optimizasyonu olarak uygulamak doğru değildir. Önbellek kısa süre sonra yeniden oluşur ve temizleme işlemi disk erişimini artırabilir. Sorun gerçekten önbellek değil de yüksek sayıda PHP işçisi, sınırsız bir uygulama önbelleği veya bellek sızıntısıysa bu komutlar temel nedeni değiştirmez.Güvenli yaklaşım, önce ölçmek, en çok tüketen hizmeti belirlemek, yalnızca ilgili yapılandırmayı değiştirmek ve ardından aynı yük altında sonucu karşılaştırmaktır. Değişiklikten sonra
free -h, top veya ps çıktısını yeniden alın; available yükselmiş, takas kullanımı azalmış ve uygulama yanıt süresi bozulmamışsa yapılan ayar amacına ulaşmıştır. RAM düşmesine rağmen hata oranı veya yanıt süresi artıyorsa ayar fazla kısıtlanmış demektir; önceki yedeğe dönüp daha küçük bir değişiklik uygulayın.