Linux sunucunuz beklenmedik bir anda çöktü ve siz de nedenini bulmaya çalışıyorsunuz. İyi haber: Sistemin nabzını tutan iki güçlü log dosyası var: /var/log/messages ve dmesg. Bu rehberde, bu logları okuyarak çökmelerin ardındaki gizemi nasıl çözeceğinizi anlatacağız.
/var/log/messages: Sistemin Günlük Defteri
Çoğu Linux dağıtımında /var/log/messages dosyası, çekirdek mesajlarından servis hatalarına kadar pek çok olayı kaydeder. Dosyayı tail -f /var/log/messages ile canlı izleyebilir ya da grep -i error /var/log/messages ile sadece hataları filtreleyebilirsiniz. Log satırları genelde şöyle görünür:
May 15 10:23:45 server kernel: [12345.678] oom-killer: gfp_mask=0x... order=0, oom_score_adj=0
Burada tarih/saat, sunucu adı, kaynak (kernel, sshd) ve mesaj yer alır. Özellikle oom-killer (Out Of Memory Killer), bellek yetersizliği nedeniyle bir işlemin öldürüldüğünü gösterir. Sık karşılaşılan diğer kritik mesajlar: segfault, kernel panic, I/O error. Logların seviyesini anlamak da önemli: emerg, alert, crit, err, warning, notice, info ve debug. Çökme anında genelde crit, alert veya emerg seviyesinde mesajlar görürsünüz.
dmesg: Çekirdek Halka Tamponu
dmesg komutu, çekirdek halka tamponundaki en son mesajları gösterir – özellikle donanım sürücüleri, PCI aygıtları, blok cihazları ve sistem belleğiyle ilgili bilgileri. Kullanımı çok basit: dmesg -H ile insan okunabilir zaman damgaları alırsınız. Çökme sonrası aramanız gereken anahtar kelimeler:
- Out of memory ya da OOM: Bellek tükendi.
- I/O error veya buffer I/O error: Disk arızası işareti.
- segfault: Bir işlem geçersiz bellek adresine erişmeye çalıştı.
- Kernel panic: Çekirdeğin toparlanamaz bir hata bulduğu an.
Daha detaylı inceleme için dmesg -l err ile sadece hata seviyesindeki mesajları listeleyebilirsiniz. Ayrıca dmesg | grep -i failed gibi kombinasyonlarla başarısız işlemleri yakalayabilirsiniz.
Logları Birleştirerek Çökme Anını Tespit Etme
Sunucu çöktüğünde genelde /var/log/messages ve dmesg çıktısındaki son satırlar ipucu verir. İlk önce tail -50 /var/log/messages ile son 50 satırı alın. Ardından dmesg -H | tail -30 çalıştırın. Eğer sistem systemd kullanıyorsa (Ubuntu 16.04+, RHEL 7+), journalctl -xe komutu da alternatif olarak kullanılabilir. Çökme öncesi tipik bir akış: oom-killer tetiklenir, ardından kritik bir işlem sinyalle öldürülür, son olarak kernel panic ile sunucu kendini durdurur.
Yaygın Çökme Nedenleri ve Nasıl Çözülür?
Bellek (OOM) Sorunları
Eğer loglarda sık sık oom-killer görüyorsanız, fiziksel bellek artırın ya da bellek sızıntısı olan uygulamayı bulun. ps aux --sort=-%mem ile en çok bellek tüketen işlemleri sıralayabilirsiniz.
Disk Doluluğu
Loglarda No space left on device varsa, df -h ile disk kullanımını kontrol edin. Gereksiz logları temizleyin veya bölümü büyütün.
Donanım Arızaları
dmesg çıktısında sık tekrarlayan I/O error veya ATA bus error disk ömrünün sonuna geldiğini gösterebilir. Akıllı verileri smartctl -a /dev/sda ile kontrol edin.
Çekirdek Panikleri
Kernel panic'ler genelde donanım uyumsuzluğu, bozuk modüller veya güncelleme sonrası hatalardan kaynaklanır. Son eklenen çekirdek modülünü veya sürücüyü geri almayı deneyin.
İpuçları: Logları Yönetin ve İzleyin
- Logları düzenli olarak döndürün (logrotate).
- Önemli hataları e-posta veya mesajlaşma uygulamalarına yönlendirmek için logwatch veya rsyslog kullanın.
- Merkezi bir log sunucusu kurarak birden çok sunucuyu tek noktadan izleyin.
Unutmayın, logların ne söylediğini anlamak, sunucunuzu tekrar ayağa kaldırmanın en hızlı yoludur. Her çökme bir öğrenme fırsatıdır. Sistem çöktüğünde panik yapmayın – önce /var/log/messages ve dmesg’e bakın.