Linux Inotify Limitleri Nedir? Dosya İzleme Performansı Rehberi

Linux Inotify Limitleri Nedir? Dosya İzleme Performansı Rehberi - Corelux
Paylaş:

Linux Inotify Limitleri Nedir? Dosya İzleme Performansı Rehberi

Son Güncelleme: Haziran 2026

Inotify, Linux sunucularda dosya ve dizin değişikliklerini gerçek zamanlı izlemek için kullanılan çekirdek tabanlı bir bildirim mekanizmasıdır. Özellikle Laravel queue watcher, Node.js geliştirme araçları, dosya senkronizasyon servisleri, antivirüs taramaları, log izleme sistemleri ve yedekleme yazılımları inotify limitlerine takıldığında performans sorunları veya beklenmeyen hata mesajları oluşabilir.

Bu rehberde Linux inotify limitleri nedir, hangi durumlarda artırılmalıdır, güvenli şekilde nasıl yapılandırılır ve hosting/VPS ortamlarında nelere dikkat edilmelidir sorularını pratik örneklerle ele alacağız.

İçindekiler

Inotify Nedir?

Inotify, Linux çekirdeği tarafından sağlanan bir dosya sistemi olay bildirim altyapısıdır. Bir dosyanın oluşturulması, silinmesi, yeniden adlandırılması, değiştirilmesi veya bir dizine yeni dosya eklenmesi gibi olaylar uygulamalara anlık olarak bildirilebilir. Bu sayede yazılımlar sürekli disk taraması yapmak yerine, yalnızca değişiklik olduğunda işlem yapar.

Örneğin bir log izleme servisi, her saniye tüm log dosyasını okumak yerine inotify sayesinde yeni satır eklendiğini öğrenebilir. Benzer şekilde bir dosya senkronizasyon aracı, hangi dizinde değişiklik olduğunu algılayarak yalnızca ilgili dosyayı karşı sunucuya aktarabilir. Bu yaklaşım CPU kullanımı, disk I/O ve gecikme süresi açısından oldukça verimlidir.

Inotify hangi olayları izleyebilir?

  • Dosya oluşturma: Bir dizin içine yeni dosya veya klasör eklendiğinde olay üretir.
  • Dosya değiştirme: İçeriği güncellenen dosyalar için bildirim sağlar.
  • Dosya silme: Silinen dosya veya dizinleri takip eder.
  • Yeniden adlandırma: Dosya taşıma veya isim değiştirme işlemlerini algılar.
  • Erişim ve izin değişikliği: Bazı araçlar okuma, yazma ve izin değişikliği olaylarını da izleyebilir.

Inotify özellikle web hosting, sanal sunucu ve uygulama barındırma ortamlarında arka planda çalışan servislerin kararlı çalışması için önemlidir. Corelux üzerinde barındırılan projelerde yoğun dosya izleme ihtiyacı varsa, kaynak planlaması için Sanal Sunucu çözümleri daha esnek bir yapı sunabilir.

Inotify Limitleri Nelerdir?

Linux sistemlerde inotify sınırsız değildir. Çekirdek, her kullanıcı ve sistem için belirli üst limitler tanımlar. Bu limitler, kötü yapılandırılmış veya hatalı çalışan bir uygulamanın tüm sistem belleğini tüketmesini önlemek için gereklidir. Ancak modern web projelerinde binlerce dosya, modül, paket ve log dizini bulunduğundan varsayılan değerler bazı durumlarda yetersiz kalabilir.

Parametre Açıklama Ne Zaman Artırılır?
fs.inotify.max_user_watches Bir kullanıcı tarafından izlenebilecek maksimum dosya/dizin sayısıdır. Node.js, Laravel, WordPress geliştirme, dosya senkronizasyonu veya büyük proje dizinlerinde yetersiz kalır.
fs.inotify.max_user_instances Bir kullanıcının oluşturabileceği maksimum inotify instance (örnek) sayısıdır. Aynı kullanıcı altında çok sayıda watcher servisi çalışıyorsa artırılabilir.
fs.inotify.max_queued_events İşlenmeyi bekleyen maksimum olay kuyruğu sayısıdır. Kısa sürede çok fazla dosya değişikliği olan sistemlerde olay kaybını azaltmak için artırılır.

Bu parametreler genellikle /proc/sys/fs/inotify/ altında yer alır ve sysctl aracılığıyla yönetilir. Burada kritik nokta, her değeri rastgele yükseltmek yerine uygulamanın gerçek ihtiyacını analiz etmektir. Gereksiz yüksek limitler, özellikle çok kullanıcılı hosting ortamlarında kaynak tüketimini öngörmeyi zorlaştırabilir.

Inotify Limit Hatalarının Belirtileri

Inotify limitlerine takılan uygulamalar her zaman açık bir hata mesajı vermeyebilir. Bazı durumlarda dosya değişiklikleri algılanmaz, otomatik derleme çalışmaz, log izleme durur veya senkronizasyon gecikir. Bu nedenle belirtileri doğru yorumlamak önemlidir.

Yaygın hata mesajları

  • ENOSPC hatası: Disk alanı dolu gibi görünse de çoğu zaman inotify watch limitinin dolduğunu ifade edebilir.
  • System limit for number of file watchers reached: Özellikle JavaScript geliştirme araçlarında görülen tipik watcher limit hatasıdır.
  • No space left on device: Gerçek disk doluluğu dışında inotify kaynak sınırına ulaşıldığında da karşınıza çıkabilir.
  • Too many open files: Her zaman inotify kaynaklı değildir; ancak dosya tanımlayıcı (file descriptor) limitleriyle birlikte incelenmelidir.

Davranışsal belirtiler

  • Hot reload çalışmıyor: Frontend veya Node.js projelerinde dosya kaydedildiği halde uygulama yenilenmez.
  • Queue watcher tepki vermiyor: Laravel veya benzeri yapılarda dosya değişimi algılanmayabilir.
  • Log izleme eksik çalışıyor: Bazı log dosyalarındaki değişiklikler izleme sistemine düşmez.
  • Senkronizasyon gecikiyor: Dosya eşitleme araçları değişiklikleri geç algılar veya hiç algılamaz.

Bu tür sorunlar özellikle geliştirici ortamları, staging sunucuları ve çok sayıda bağımlılık içeren uygulamalarda sık görülür. Eğer projeyi paylaşımlı hosting yerine daha izole bir altyapıda çalıştırmak istiyorsanız Linux Hosting veya kaynak ihtiyacına göre VPS/VDS seçenekleri değerlendirilebilir.

Mevcut Inotify Limitlerini Görme

Inotify ayarlarına müdahale etmeden önce mevcut değerleri kontrol etmek gerekir. Bu işlem için root veya yeterli yetkiye sahip bir kullanıcıyla terminale bağlanabilirsiniz. Aşağıdaki komutlar Ubuntu, Debian, AlmaLinux, Rocky Linux ve birçok modern Linux dağıtımında benzer şekilde çalışır.

cat /proc/sys/fs/inotify/max_user_watches
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_queued_events

Aynı değerleri sysctl komutu ile de görüntüleyebilirsiniz:

sysctl fs.inotify.max_user_watches
sysctl fs.inotify.max_user_instances
sysctl fs.inotify.max_queued_events

Bir kullanıcının hangi süreçlerle inotify kullandığını analiz etmek için lsof yardımcı olabilir. Ancak çok yoğun sistemlerde çıktı oldukça uzun olabilir:

lsof | grep inotify

Daha okunabilir bir yaklaşım olarak belirli servislerin süreç kimliklerini inceleyebilirsiniz. Örneğin node, php, rsync, lsyncd veya izleme ajanı süreçleri kontrol edilebilir:

ps aux | egrep 'node|php|rsync|lsyncd|watch'

Burada amaç yalnızca sayıları görmek değil, limit tüketiminin hangi uygulamadan kaynaklandığını anlamaktır. Çünkü limit artırmak kısa vadede çözüm sağlar; fakat gereksiz geniş dizinleri izleyen hatalı bir yapılandırma varsa sorun tekrar büyüyebilir.

Inotify Limitleri Nasıl Artırılır?

Inotify limitleri geçici veya kalıcı olarak artırılabilir. Geçici yöntem, sistem yeniden başlatıldığında kaybolur. Kalıcı yöntem ise /etc/sysctl.conf veya /etc/sysctl.d/ altındaki yapılandırma dosyalarıyla uygulanır. Üretim ortamlarında kalıcı ve dokümante edilmiş yapılandırma tercih edilmelidir.

Geçici limit artırma

Hızlı test yapmak için aşağıdaki komutları kullanabilirsiniz:

sysctl -w fs.inotify.max_user_watches=524288
sysctl -w fs.inotify.max_user_instances=1024
sysctl -w fs.inotify.max_queued_events=32768

Bu değerler birçok orta ölçekli web projesi için yeterli olabilir. Ancak yüksek trafikli, çok kullanıcılı veya container yoğunluğu olan sistemlerde ölçüm yaparak ilerlemek gerekir.

Kalıcı yapılandırma

Kalıcı ayar için ayrı bir dosya oluşturmak daha düzenli bir yöntemdir:

nano /etc/sysctl.d/99-inotify.conf

Dosya içine aşağıdaki değerleri ekleyebilirsiniz:

fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances=1024
fs.inotify.max_queued_events=32768

Ardından ayarları yeniden yükleyin:

sysctl --system

Değerlerin uygulandığını doğrulamak için tekrar kontrol edin:

sysctl fs.inotify.max_user_watches fs.inotify.max_user_instances fs.inotify.max_queued_events

Container ve Docker ortamlarında dikkat

Docker veya container tabanlı yapılarda inotify limitleri çoğu zaman host işletim sistemi üzerinden belirlenir. Yani container içinde değer düşük görünmese bile asıl sınır host tarafından yönetiliyor olabilir. Bu nedenle container içinde değil, ana sunucuda sysctl yapılandırması yapmak gerekebilir.

Geliştirme ve üretim ortamlarını tek sunucuda yönetiyorsanız kaynak ayrımı için Bulut Sunucu veya proje ölçeğine göre Kiralık Sunucu altyapısı tercih edilebilir.

Performans ve Güvenlik Açısından Dikkat Edilecekler

Inotify limitini artırmak genellikle güvenli bir işlemdir; ancak kontrolsüz şekilde çok yüksek değerler vermek doğru değildir. Her watch kaydı çekirdek belleğinde belirli miktarda kaynak tüketir. Tek başına küçük görünse de yüz binlerce izleme kaydı, özellikle düşük RAM kapasiteli sunucularda fark edilir bir yük oluşturabilir.

İyi uygulamalar

  • Gereksiz dizinleri izlemeyin: node_modules, vendor, cache, tmp ve yedek dizinleri çoğu senaryoda watcher dışında bırakılmalıdır.
  • Kullanıcı bazlı ayrım yapın: Her uygulamayı aynı kullanıcı altında çalıştırmak yerine servis bazlı kullanıcılar oluşturmak kaynak takibini kolaylaştırır.
  • Log rotasyonunu kontrol edin: Çok hızlı dönen log dosyaları izleme kuyruğunu gereksiz şişirebilir.
  • Limitleri kademeli artırın: Önce mevcut tüketimi ölçün, ardından ihtiyaca göre makul artış yapın.
  • İzleme araçlarını optimize edin: Uygulama tarafındaki ignore/exclude ayarları çoğu zaman sistem limitini artırmaktan daha etkili olabilir.

Güvenlik bakış açısı

Çok kullanıcılı hosting sistemlerinde kötü niyetli veya hatalı çalışan bir kullanıcı süreci aşırı sayıda watcher açarak kaynak tüketebilir. Bu durum doğrudan yetki yükseltme anlamına gelmez; ancak kaynak tüketimi tabanlı hizmet aksaması oluşturabilir. Bu nedenle paylaşımlı ortamlarda limit değişiklikleri tüm kullanıcıların etkilenebileceği düşünülerek yapılmalıdır.

Güvenli yapılandırma için izleme kapsamını daraltmak, servisleri ayrı kullanıcılarla çalıştırmak, sistem kaynaklarını takip etmek ve düzenli yedekleme almak önemlidir. Kritik projeler için Yedekleme Hizmeti kullanmak, dosya izleme veya senkronizasyon hatalarından doğabilecek veri kayıplarına karşı ek güvence sağlar.

Pratik Kullanım Senaryoları

Inotify limitleri yalnızca geliştiricileri ilgilendiren teknik bir detay değildir. Üretim sunucularında çalışan pek çok servis, dosya değişikliklerini gerçek zamanlı izlemek için bu mekanizmadan yararlanır.

Senaryo 1: Node.js ve frontend geliştirme ortamı

React, Vue, Angular veya benzeri frontend projelerinde geliştirme sunucuları dosya değişikliklerini izleyerek otomatik derleme yapar. Büyük projelerde node_modules dizini yüz binlerce dosya içerebilir. Eğer bu dizin izlemeye dahil edilirse inotify limitleri hızla dolar.

# Örnek: Gereksiz dizinleri hariç tutma mantığı
WATCHPACK_POLLING=false
CHOKIDAR_USEPOLLING=false

Uygulama aracına göre ignore listesi tanımlamak, limit artırmadan önce denenmesi gereken ilk adımdır.

Senaryo 2: Laravel proje dizini

Laravel projelerinde storage, bootstrap/cache, vendor ve log dizinleri yoğun değişiklik üretebilir. Geliştirme ortamında dosya watcher kullanılıyorsa, yalnızca gerekli kaynak dizinlerinin izlenmesi daha sağlıklıdır.

# Örnek kontrol
find /var/www/proje -type d | wc -l
find /var/www/proje -type f | wc -l

Bu komutlar proje içindeki dizin ve dosya sayısını görmenizi sağlar. Eğer sayı çok yüksekse watcher kapsamını daraltmak gerekir.

Senaryo 3: Dosya senkronizasyon servisleri

lsyncd gibi araçlar dizin değişikliklerini algılayarak uzak sunucuya aktarım yapabilir. Bu tip yapılarda yedek, cache veya geçici dosya dizinlerini izlemeye dahil etmek hem gereksiz trafik üretir hem de inotify kuyruğunu doldurabilir.

# Örnek: lsyncd servis durumunu kontrol etme
systemctl status lsyncd

Senaryo 4: Log izleme ve güvenlik ajanları

Güvenlik yazılımları, dosya bütünlüğü izleme araçları ve log ajanları inotify kullanabilir. Çok sayıda sanal host veya uygulama logu bulunan sunucularda limit planlaması yapmak gerekir. Bu tarz ortamlarda log rotasyonu, merkezi log yönetimi ve gereksiz logların kapatılması performansa katkı sağlar.

Sorun Giderme Kontrol Listesi

Inotify kaynaklı bir problem yaşadığınızdan şüpheleniyorsanız aşağıdaki adımları sırayla uygulayabilirsiniz. Bu yaklaşım, gereksiz limit artışlarının önüne geçer ve sorunun asıl kaynağını bulmanızı kolaylaştırır.

  1. Hata mesajını doğrulayın: Uygulama loglarında ENOSPC, file watchers veya No space left on device ifadelerini arayın.
  2. Disk alanını kontrol edin: Hatanın gerçek disk doluluğundan kaynaklanmadığından emin olun.
  3. Mevcut limitleri görüntüleyin: sysctl fs.inotify.max_user_watches komutu ile değerleri kontrol edin.
  4. İzlenen dizinleri analiz edin: Gereksiz büyük dizinlerin watcher kapsamına girip girmediğini inceleyin.
  5. Uygulama ignore ayarlarını yapın: Cache, vendor, node_modules ve geçici dosya dizinlerini hariç tutun.
  6. Limitleri kademeli artırın: Ani ve aşırı yüksek değerler yerine ölçülü artış yapın.
  7. Servisi yeniden başlatın: Bazı uygulamalar yeni limitleri algılamak için yeniden başlatılmalıdır.
  8. Kaynak kullanımını izleyin: RAM, CPU ve disk I/O değerlerinde anormal artış olup olmadığını takip edin.

Örnek temel kontrol komutları:

df -h
free -m
sysctl fs.inotify.max_user_watches
journalctl -xe | grep -i inotify

Bu kontroller sonucunda sorun devam ediyorsa, uygulamanın kendi watcher yapılandırması veya dosya tanımlayıcı limitleri ayrıca incelenmelidir. Bazı durumlarda problem inotify değil, ulimit, servis limitleri veya hatalı log rotasyonu olabilir.

Sıkça Sorulan Sorular

Inotify limitini artırmak sunucuya zarar verir mi?

Makul değerlerle artırıldığında genellikle zarar vermez. Ancak çok yüksek limitler çekirdek belleği tüketimini artırabilir. Bu nedenle önce mevcut kullanım analiz edilmeli, ardından kademeli artış yapılmalıdır.

No space left on device hatası her zaman disk doluluğu mudur?

Hayır. Bu hata gerçek disk doluluğundan kaynaklanabileceği gibi inotify watch limitinin dolmasından da kaynaklanabilir. Önce df -h ile disk alanını, ardından sysctl fs.inotify.max_user_watches ile watcher limitini kontrol etmek gerekir.

Hangi değeri kullanmalıyım?

Orta ölçekli projelerde fs.inotify.max_user_watches=524288, fs.inotify.max_user_instances=1024 ve fs.inotify.max_queued_events=32768 başlangıç için yaygın kullanılan değerlerdir. Ancak en doğru değer, proje dosya sayısı ve çalışan watcher servislerine göre belirlenmelidir.

Paylaşımlı hosting üzerinde inotify limitini değiştirebilir miyim?

Genellikle hayır. Inotify limitleri sistem seviyesinde yönetildiği için paylaşımlı hosting kullanıcıları bu ayarları değiştiremez. Bu tür ihtiyaçlar için VPS, VDS veya kiralık sunucu gibi daha izole altyapılar tercih edilmelidir.

Docker container içinde inotify limiti nasıl yönetilir?

Çoğu senaryoda inotify limitleri container içinden değil, host işletim sistemi üzerinden yönetilir. Bu nedenle ayarları ana sunucuda sysctl ile yapmak ve container servislerini yeniden başlatmak gerekebilir.

Inotify yerine polling kullanmak mantıklı mı?

Polling, belirli aralıklarla dosya sistemini tarama yöntemidir. Bazı uyumluluk sorunlarında işe yarayabilir; ancak CPU ve disk I/O tüketimi inotify yöntemine göre daha yüksek olabilir. Bu nedenle kalıcı çözüm olarak önce inotify limitleri ve watcher kapsamı optimize edilmelidir.

Sonuç

Linux inotify limitleri, modern web uygulamalarının dosya değişikliklerini hızlı ve verimli şekilde takip edebilmesi için kritik öneme sahiptir. Node.js, Laravel, log izleme, dosya senkronizasyonu ve güvenlik ajanları gibi birçok araç bu mekanizmaya bağlı çalışır. Limitlerin yetersiz kaldığı durumlarda uygulamalar dosya değişikliklerini algılamayabilir, otomatik derleme durabilir veya yanıltıcı hata mesajları üretilebilir.

Sağlıklı bir yapılandırma için önce mevcut limitleri kontrol etmeli, hangi uygulamanın ne kadar watcher kullandığını analiz etmeli, gereksiz dizinleri izleme dışında bırakmalı ve ardından limitleri kademeli olarak artırmalısınız. Özellikle üretim ortamlarında bu değişiklikler dokümante edilmeli, kaynak kullanımı izlenmeli ve düzenli yedekleme stratejisiyle desteklenmelidir.

Corelux, farklı ölçeklerdeki projeler için Hosting, Türkiye VDS Sunucu, Türkiye VPS Sunucu ve Kiralık Sunucu çözümleri sunar. Dosya izleme, uygulama performansı ve kaynak izolasyonu ihtiyacınız arttığında, projenize uygun altyapı seçimi uzun vadede daha kararlı ve ölçeklenebilir bir çalışma ortamı sağlar.

Yazar

Boran BAR

Chat on WhatsApp