LAMP Üzerinde “Failed to open stream: No space left on device” Hatası

Linux üzerinde Apache sunucu ile PHP ve MySQL kullanımı, nginx tahtını sallasa da, oldukça yaygın. Bu yapı üzerinde aldığım bir hatayı ve çözümünü paylaşayım.

Hata web sayfanızda Session kullanıyorsanız “Failed to open stream: No space left on device” şeklinde görünüyor. PHP her oturum için bir dosya oluşturuyor sistem üzerinde, eğer cihazınız üzerinde yer kalmadıysa bunu yapamıyor ve bu hatayı alarak Session kullanamıyorsunuz.

İlk iş SSh ile sunucumuza bağlanıp disk boyutları kontrol etmek. Sunucunuz paylaşımlı ise ya da SSH imkanınız yok ise satın aldığınız firma ile görüşmeniz gerekecektir. Bağlandıktan sonra df -h komutu ile disk kullanımına bakıyoruz. Aşağıdaki gibi bir döküm alabilirsiniz. Görüldüğü gibi diskte boş yer çok eğer sizin disk kullanımınız 100% ise bir şeyler silmeniz sorunu çözebilir değilse devam edelim.

Linux sistemlerde inode (index node) denilen bir kavram vardır. Sistem üzerindeki her dosya ve klasör hakkında bilgiler tutar. Ve sistem üzerindeki inode sayısının da bir limiti vardır. Inode kullanımı da df -ikomutu ile görebiliriz. Aşağıda görüldüğü gibi sda1 için 100%’e ulaşılmış. Burada klasör bazlı olarak da du -s --inodes /var/lib/php/* komutu ile hangi klasörün bu sayıyı şişirdiğini görebiliriz. (Linux sürümüne göre PHP dosyaları farklı bir yolda olabilir)

Sorunu teşhis ettik. Hızlı çözüm sessions klasörünü boşaltmak. find /var/lib/php/sessions -type f -delete komutu bu işlemi yapacak. df -i ile inodes sayılarınızı kontrol edebilirsiniz tekrar.

Peki bu klasör neden şişti? Bunun bir kaç sebebi olabilir. Şurada detaylı bir anlatım var. php.ini dosyanız içerisinde session ile ilgili 3 değişken var.

session.gc_maxlifetime: session dosyası ömrü, saniye insinde

session.gc_probability ve session.gc_divisor : ömrü dolan session dosyalarının silinme olasılığı hesaplamak için gerekli değerler. gc_probability/gc_divisor ihtimalde bir silinme işlemi çalışır.

gc_probability değeri sıfır olması bende bu klasörün dolmasına sebep olmuştu.

Bir Cevap Yazın